You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 05:22:06