【问题标题】:Swift store all numbers that are random generated and won't generated them againSwift 存储所有随机生成且不会再次生成的数字
【发布时间】:2018-06-30 16:10:23
【问题描述】:

我正在尝试存储随机数生成器生成的所有数字。之后,号码生成器需要检查号码是否已经生成,如果是,它将继续生成一个新号码,直到生成所有数字,例如 1 到 30。到目前为止,我只有随机数生成器:

if let Aantalvragen = snapshot?.data()!["Aantal vragen"] as? String {
       self.AantalVragenDef = Aantalvragen
}
let RandomVraag = Int(arc4random_uniform(UInt32(self.AantalVragenDef)!) + 1)

AantalVragenDef 是一个数字,表示有多少问题。所以生成器知道它可以生成多远。请帮忙。

【问题讨论】:

  • 创建一个值从 1 到 30 的数组,我们称之为randomArray。然后let randomIndex = arc4random_uniform(randomArray.count); let randomValue = randomArray[randomIndex]; randomArray.remove(at:randomIndex)

标签: swift arc4random


【解决方案1】:

最简单的方法可能是创建一个数组或列表,并用你想要的数字 1 到 n 填充它,将它打乱,然后按照它们出现的顺序使用数字。这样可以保证每个数字只出现一次。

how to shuffle an array in Swift

【讨论】:

    【解决方案2】:

    我相信你想要得到的是一个随机生成器,它生成从 1 到问题数量的数字,但如果这个数字已经存在,你不想保留它。我建议使用 if-else 语句和数组。

    代码可能如下所示:

    if let Aantalvragen = snapshot?.data()!["Aantal vragen"] as? String {
       self.AantalVragenDef = Aantalvragen
    }
    
    var array = [Int]()
    
    while array.count != self.AantalVragenDef {
        let RandomVraag = Int(arc4random_uniform(UInt32(self.AantalVragenDef)!) + 1)
        if array.contains(RandomVraag) == false {
            array.append(RandomVraag)
        }
    
    }
    

    此循环将继续,直到数组中有(问题数)个整数。让我知道这是否是您正在寻找的。​​p>

    祝你好运,阿纳夫

    【讨论】:

    • Roger Lindsjö 还提出了使用 shuffle 方法的一个好点。我认为这可能是一个更简单的解决方案。
    • 感谢您的反应!问题不断出现。如果我打印数组,它将返回“[]”。所以我认为生成的数字没有保存在数组中。
    • 有趣。你能解释一下你在程序中是如何/在哪里创建数组的吗?
    猜你喜欢
    • 2012-04-30
    • 1970-01-01
    • 1970-01-01
    • 2014-01-11
    • 1970-01-01
    • 2017-07-23
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    相关资源
    最近更新 更多