Arrays 如何以随机顺序打印此词典中的所有数字而不重复它们
代码在3次尝试后崩溃。 如何打印所有10个值而不重复它们Arrays 如何以随机顺序打印此词典中的所有数字而不重复它们,arrays,swift,dictionary,arc4random,Arrays,Swift,Dictionary,Arc4random,代码在3次尝试后崩溃。 如何打印所有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(f
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开始,移除第一个元素后,密钥甚至不会连续。因此,例如,如果您从词典
(比方说key5
)的中间移除一个键,windCard
将有9个元素,因此die
将在0-8
范围内,但您的词典
将缺少一个键,因此您的代码将在windCard[键]上崩溃代码>如果模具为5
您可以使用arc4random\u uniform
,它接受一个上限
输入参数,并使用生成的随机数为windCard
字典
的键下标,这将保证连续
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)
}
问题是Int(arc4random())%windCard.count
生成范围为0
到windCard.count-1
的密钥,而密钥从1开始,移除第一个元素后,密钥甚至不会连续。因此,例如,如果您从词典
(比方说key5
)的中间移除一个键,windCard
将有9个元素,因此die
将在0-8
范围内,但您的词典
将缺少一个键,因此您的代码将在windCard[键]上崩溃代码>如果模具为5
您可以使用arc4random\u uniform
,它接受一个上限
输入参数,并使用生成的随机数为windCard
字典
的键下标,这将保证连续
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)
}
我的方法是将每个循环中得到的随机数存储在临时文件或数据库中,然后比较新值,如果它们匹配,生成一个新的随机值,然后再与文件或数据库进行比较,这样即使它们匹配,也可以确保每次都得到真实的值。希望这个“算法”对您有所帮助。我的方法是将每个循环中得到的随机数存储在临时文件或数据库中,然后比较新值,如果它们匹配,生成一个新的随机值,然后再次与文件或数据库进行比较,这样即使它们匹配,您也可以确保每次都得到一个真正的值。希望这个“算法”能帮助你。提示:die
将是一个从0
到9
的值。但是每次我删除这个值,字典的长度都会变短,那么die
的值将是0
到windCard.count-1
。因此,最初9
,每次都会减少。0
应该让你去“噢!”。检查这个我还是不明白,代码在崩溃前仍然只工作了3次提示:die
将是一个从0
到9
的值。但是每次我删除这个值,字典的长度都会变短,然后,die
的值将是0
到windCard.count-1
。因此,最初9
,每次都会减少。0
应该会让你说“哦!”。检查这个我还是不明白,代码在崩溃前只工作了3次为什么你会浪费时间和资源在文件/数据库中存储临时值?只需将它们存储在内存中的数据结构中。为什么要浪费时间和资源在文件/数据库中存储临时值?只需将它们存储在内存中的数据结构中。