gpt4 book ai didi

ios - 如何使数字不重复超过 2 次?

转载 作者:行者123 更新时间:2023-11-28 16:00:08 25 4
gpt4 key购买 nike

各位!假设我们有

let random = arc4random_uniform(6)

如何让它不重复相同的数字两次以上?我试过这样做:

let previousNumber = Int()
let lastNumber = Int ()

let random = Int(arc4random_uniform(6))

if random == previousNumber {
lastNumber = previousNumber
} else {
previousNumber = random
}

if random == lastNumber {
random = Int(arc4random_uniform(6))
}

但是没有用。我是 swift 的新手,我没有在新的 swift 3 代码上找到关于这个的话题。谢谢 !

最佳答案

首先让我们构建一个类来保存所选值的最近历史

class History {

private let size: Int
private var values = [Int]()

init(size:Int) {
self.size = size
}

func add(value: Int) {
values.insert(value, at: 0)
if values.count > size {
values.removeLast()
}
}

var repeatedValueOnFullHistory: Int? {
guard Set(values).count <= 1 else { return nil }
return values.first
}

}

接下来让我们构建一个随机发生器

class Randomizer {
private var allValues = [Int]()
private var history: History

init?(maxValue: Int) {
guard maxValue > 0 else { return nil }
self.allValues = Array(0...maxValue)
self.history = History(size: maxValue + 1)
}

var next: Int {
let excludedValue = history.repeatedValueOnFullHistory
let allowedValues = allValues.filter { excludedValue != $0 }

let randomIndex = Int(arc4random_uniform(UInt32(allowedValues.count)))

let nextValue = allowedValues[randomIndex]
history.add(value: nextValue)
return nextValue
}
}

最后让我们测试一下

if let r = Randomizer(maxValue: 6) {
r.next // 6
r.next // 2
r.next // 1
r.next // 4
r.next // 6
r.next // 4
r.next // 1
}

关于ios - 如何使数字不重复超过 2 次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41199529/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com