随机数集,无重复

时间:2020-04-30 13:49:53

标签: swift random

我想编写一个程序,使我的餐厅可以在我的学校中随机座位。

我很了解

import Foundation

var randomNumbers: [Int] = []

for _ in 0...5 {
    let randomInt = Int.random(in: 0...160)
    randomNumbers.append(randomInt)
}

print(randomNumbers)

这会打印1到160之间的6个数字。我想说4次。您将如何做到这一点,这样您就无法与以前坐过的人坐在一起

1 个答案:

答案 0 :(得分:0)

我将创建一个数字1-160的数组,并使用shuffled方法将它们随机化。当您想要随机数的子集时,请抓住最后六个,然后从数组中删除最后六个。这样一来,您就不会有任何重复。

class RandomNumberGenerator {

    private var possible: [Int] = []

    init(range: ClosedRange<Int>) {
        reset(range: range)
    }

    func next(count: Int) -> [Int] {
        let result = possible.suffix(count).map { $0 }
        possible.removeLast(result.count)
        return result
    }

    func reset(range: ClosedRange<Int>) {
        possible = range.map { $0 }.shuffled()
    }

    private init() {}
}

let rando = RandomNumberGenerator(range: 1...160)
for _ in 0..<4 {
    print(rando.next(count: 6))
}

请注意,如果您调用该数组超过26次,它将用完数字。因此,要恢复数组中的所有值,只需调用reset

rando.reset(range: 1...160)