Arrays 如何以随机顺序打印此词典中的所有数字而不重复它们

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

代码在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(forKey: die)

问题是
Int(arc4random())%windCard.count
生成范围为
0
windCard.count-1
的密钥,而密钥从1开始,移除第一个元素后,密钥甚至不会连续。因此,例如,如果您从
词典
(比方说key
5
)的中间移除一个键,
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开始,移除第一个元素后,密钥甚至不会连续。因此,例如,如果您从
词典
(比方说key
5
)的中间移除一个键,
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次为什么你会浪费时间和资源在文件/数据库中存储临时值?只需将它们存储在内存中的数据结构中。为什么要浪费时间和资源在文件/数据库中存储临时值?只需将它们存储在内存中的数据结构中。