gpt4 book ai didi

swift - 如何在不使用 while 循环的情况下生成不包括一个的随机数?

转载 作者:搜寻专家 更新时间:2023-10-30 22:06:27 25 4
gpt4 key购买 nike

假设我想生成一个介于 1 和 100 之间的随机数,但我不想包括 42。如果不重复随机方法直到它不是 42,我将如何做到这一点。

最佳答案

Updated for Swift 5.1

排除 1 个值

var nums = [Int](1...100)
nums.remove(at: 42)

let random = Int(arc4random_uniform(UInt32(nums.count)))
print(nums[random])

排除多个值

Range 的这个扩展在您想要排除超过 1 个值时确实提供了一种解决方案。

extension ClosedRange where Element: Hashable {
func random(without excluded:[Element]) -> Element {
let valid = Set(self).subtracting(Set(excluded))
let random = Int(arc4random_uniform(UInt32(valid.count)))
return Array(valid)[random]
}
}

例子

(1...100).random(without: [40,50,60])

我认为第二个解决方案的计算复杂度为 O(n),其中 n 是范围中包含的元素数。

这里的假设是调用者提供的排除值不超过 n 个。

关于swift - 如何在不使用 while 循环的情况下生成不包括一个的随机数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34343444/

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