三次尝试后代码崩溃。
如何打印所有10个值而不重复它们?
var windCard = [1:11, 2:12, 3:21, 4:22, 5:31, 6:32, 7:41, 8:42, 9:51, 10:52 ]
var die = 0
die = Int(arc4random())%windCard.count
print("The wind blow the mosquitoes \(windCard[Int(die)]!)")
windCard.removeValue(forKey: die)
最佳答案
问题是Int(arc4random())%windCard.count
生成0
到windCard.count-1
范围内的键,而键从1开始,删除第一个元素后,键甚至不会连续。例如,如果您从Dictionary
的中间移除一个键(假设key5
),那么windCard
将有9个元素,因此die
将在0-8
的范围内,但是您的Dictionary
将丢失一个键,因此如果windCard[key]!
是die
的话,您的代码将在5
上崩溃。
您可以通过使用arc4random_uniform
(它接受upperBound
输入参数)和使用生成的随机数下标keys
windCard
的Dictionary
(它保证是连续的)来实现您的目标。
while windCard.count > 0 {
let die = Int(arc4random_uniform(UInt32(windCard.keys.count)))
let key = Array(windCard.keys)[die]
print("The wind blow the mosquitoes \(windCard[key]!)")
windCard.removeValue(forKey: key)
}
关于arrays - 如何以随机顺序打印此词典中的所有数字而不重复,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50684766/