我正面临着一个需要生成三个不同随机数的场景,我知道如何去做,并且已经实现了,但是我想知道是否有任何方法可以优化我的方法,因为我觉得我的方法成本太高了。
var randomIndex = [Int]()
var generatedValue = [Int]()
var c = 0
randomIndex.removeAll()
while true {
let randomValue = Int.random(in: 1 ... 10)
generatedValue.append(randomValue)
print(randomValue)
for i in 0 ... generatedValue.count - 1{
if randomValue != generatedValue[i]{
randomIndex.append(randomValue)
c += 1
}
}
if c >= 3 {
break
}
}
这里我声明了两个不同的数组,使用一个无限循环和一个变量来跟踪值。有没有函数可以在一个从0到2的范围循环中生成三个不同的随机数?或者有没有优化的方法可以做到这一点?请帮助。
6条答案
按热度按时间bzzcjhmw1#
Set
更简单,它保证值的唯一性另一种方法是创建一个值数组,选择一个随机元素并从数组中删除该元素
关于 * 有什么方法可以优化我的方法 *,您代码中的
for
循环非常昂贵。首先,对于基于索引的循环,推荐的语法是
但实际上你不需要索引,所以快速枚举更好
循环中开销最大的部分是,即使已经找到了值,也总是迭代整个数组。
但是仍然有一种更有效的语法
u2nhd7ah2#
您可以使用一个集合
q1qsirdb3#
您可以对数组执行
shuffle
操作并获取前几个n
元素evrscar24#
您可以使用此扩展名:
然后只调用即
[Int](randomsCount: 3, minValue: 0, maxValue: 10)
来生成具有3个0到10之间的随机整数的数组。请注意,使用这种方法时,您只需为每个所需的随机数计算一次随机数。
k3fezbri5#
这是一个辅助函数,用于生成长度为x的随机数。
dfddblmv6#