三次尝试后代码崩溃。
如何打印所有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生成0windCard.count-1范围内的键,而键从1开始,删除第一个元素后,键甚至不会连续。例如,如果您从Dictionary的中间移除一个键(假设key5),那么windCard将有9个元素,因此die将在0-8的范围内,但是您的Dictionary将丢失一个键,因此如果windCard[key]!die的话,您的代码将在5上崩溃。
您可以通过使用arc4random_uniform(它接受upperBound输入参数)和使用生成的随机数下标keyswindCardDictionary(它保证是连续的)来实现您的目标。

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/

10-12 13:05