gpt4 book ai didi

ios - 如何在 iOS 中只获取一次随机数

转载 作者:行者123 更新时间:2023-11-28 06:00:32 26 4
gpt4 key购买 nike

我想为 iOS 开发一款励志应用。使用此代码随机选择动机句子。

arc4random_uniform(100)

问题:代码显示示例 2 和另一个 2,以便用户再次获得相同的句子。

我需要从某个范围(例如 100)中仅获取一次随机数的东西,并且在每个数字之后代码应该重复自身,以便用户可以再次看到激励性句子。

最佳答案

您可以使用 Set 来过滤已经提取的数字(Sets 包含唯一元素),并执行类似这样的操作

import Foundation

var setOfNumbers: Set<UInt32> = []

func extractUniqueNumber(with treshold: UInt32, alreadyExtracted: inout Set<UInt32>) -> UInt32? {

guard alreadyExtracted.count < treshold else { return nil }

let randomNumber = arc4random_uniform(treshold)

if !alreadyExtracted.contains(randomNumber) {
alreadyExtracted.insert(randomNumber)
return randomNumber
} else {
return extractUniqueNumber(with: treshold, alreadyExtracted: &alreadyExtracted)
}
}

// test it out with a number of tries

for _ in 0...100 {
if let number = extractUniqueNumber(with: 100, alreadyExtracted: &setOfNumbers) {
print("Your number is: \(number).\n- Previously extracted numbers) are: \(setOfNumbers)")
} else {
print("You have extracted all numbers already")
}
}

如果提取数字的顺序很重要,可以将 Set 替换为 Array。付出的代价是对已经提取的数字的搜索速度变慢,但在 100 的范围内很可能仍然没问题。在这种情况下,代码将是

var setOfNumbers: [UInt32] = []

func extractUniqueNumber(with treshold: UInt32, alreadyExtracted: inout [UInt32]) -> UInt32? {

guard alreadyExtracted.count < treshold else { return nil }

let randomNumber = arc4random_uniform(treshold)

if !alreadyExtracted.contains(randomNumber) {
alreadyExtracted.append(randomNumber)
return randomNumber
} else {
return extractUniqueNumber(with: treshold, alreadyExtracted: &alreadyExtracted)
}
}

关于ios - 如何在 iOS 中只获取一次随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49955884/

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