Swift生成非连续重复随机数问题:现有代码出现连续重复值
解决Swift中生成非连续重复随机数的问题
你当前的代码没有检查新生成的随机数是否和上一个值重复,所以会出现连续相同的情况。要实现可重复但连续两次不相同的随机数,只需要在生成每个新数时,确保它和数组最后一个元素(即上一次生成的数)不同即可。
基础修正版代码
var numArr = [Int]() // 先添加第一个随机数,无需检查重复 numArr.append(Int.random(in: 0...10)) // 生成剩余9个随机数,确保每个新数和前一个不同 for _ in 1..<10 { var newNum: Int repeat { newNum = Int.random(in: 0...10) } while newNum == numArr.last! numArr.append(newNum) } print(numArr)
封装复用版(更推荐)
如果需要多次生成这类随机数组,可以封装成函数,方便指定生成数量和数值范围:
func generateNonConsecutiveRandoms(count: Int, range: ClosedRange<Int>) -> [Int] { guard count > 0 else { return [] } var result = [Int]() // 初始化第一个元素 result.append(Int.random(in: range)) for _ in 1..<count { var newNum: Int // 循环生成直到新数和前一个不同 repeat { newNum = Int.random(in: range) } while newNum == result.last! result.append(newNum) } return result } // 使用示例:生成10个0-10之间的非连续重复随机数 let numArr = generateNonConsecutiveRandoms(count: 10, range: 0...10) print(numArr)
关键逻辑说明
- 第一个随机数直接生成,因为没有前一个值需要对比
- 后续每个数通过
repeat-while循环生成:先随机取值,再判断是否和上一个值相同,如果相同就重新生成,直到得到符合要求的数 - 这样既保证了非连续重复,又允许非连续位置出现相同数值,完全符合你的需求
内容的提问来源于stack exchange,提问作者Kaung Set
相关产品推荐
相关产品推荐

