如何生成仅显示一次的随机数?

Gen*_*use -4 arrays random swift

我正在尝试在0-4之间生成最多5个数字,并且不会多次重复生成相同的数字。该程序将在尝试3次后停止,因此生成的随机数应为4,3,2,而不是4,3,4(例如)。

我创建了一个包含5个字符串元素的数组。单击按钮3次后,数组中的至少3个字符串将显示在标签上。单击按钮3次后,该应用程序将结束。但是,问题是每次单击按钮时,数组中的某些字符串都会不断重复自身。我发现了一种防止数字重复的方法,例如,代替(1,1,3)(1,3,1)。但就我而言,我不希望数字一旦生成就生成。例如。(1,3,4)而不是(1,3,1),其中重新生成(1)。

var fruits: [String] = ["Apple", "Mango", "Cherry", "Strawberry", "Blueberry", "Banana"] // fruits to be displayed in the label

func randomizeNum() -> UInt32 {
        var randomNumber = arc4random_uniform(UInt32(fruits.count))
        while previousNumber == randomNumber {
            randomNumber = arc4random_uniform(UInt32(fruits.count))
        }
        displayLbl.text = fruits[Int(randomNumber)]
        previousNumber = randomNumber

        print("the random num is \(randomNumber)") // This prints for example 5, 1, 5. Need it to print only numbers that's not yet displayed with 3 attempts.
        return randomNumber
    }
Run Code Online (Sandbox Code Playgroud)

我希望此函数的输出生成一个随机数,例如0,4,1,但它生成5,1,5或0,4,0,其中(0)将再次重新生成。

Fog*_*ter 5

您应该在这里进行的操作是洗净阵列,然后取头三个结果。

let randomFruits = fruits.shuffled()[...2]
Run Code Online (Sandbox Code Playgroud)

现在,RandomFruits是从您的水果数组中获取的三个随机字符串的数组切片。

现在只显示它们。

  • 这应该是正确的答案。 (5认同)