Swift:确保没有两个数组相同

时间:2016-05-09 17:49:20

标签: arrays swift random arc4random

随机随机创建4个随机数(1-4)的不同阵列。但是,我如何确保没有两个数组相同?

例如:[1,2,3,4],[4,3,2,1],[1,2,2,1],[1,2,3,4]< - 第一和最后一个是随机生成的,如何查看它是否随机,是否再次生成,如果不是,继续?

这是我的代码,但我认为它不起作用,因为有几次我会看到两个相同的数组...

func randomNumbersArray(i: UInt32) -> [Int] {
    let r = [Int(arc4random_uniform(i) + 1),
             Int(arc4random_uniform(i) + 1),
             Int(arc4random_uniform(i) + 1),
             Int(arc4random_uniform(i) + 1)]
    return r
}

func arrays() {
    let main = randomNumbersArray(4)
    qArray = main
    aArray = main
    bArray = randomNumbersArray(4)
    cArray = randomNumbersArray(4)
    dArray = randomNumbersArray(4)

    if aArray == bArray || aArray == cArray || aArray == dArray ||
        bArray == cArray || bArray == dArray || cArray == dArray {
        bArray = randomNumbersArray(4)
        cArray = randomNumbersArray(4)
        dArray = randomNumbersArray(4)
    }
    print(aArray)
    print(bArray)
    print(cArray)
    print(dArray)
}

2 个答案:

答案 0 :(得分:1)

这样的事情应该这样做:

func randomNumbersArray(i: UInt32) -> [Int] {
    let r = [Int(arc4random_uniform(i) + 1),
             Int(arc4random_uniform(i) + 1),
             Int(arc4random_uniform(i) + 1),
             Int(arc4random_uniform(i) + 1)]
    return r
}

func arrays() {
    var randArrays = [[Int]]()

    repeat {
        let newArray = randomNumbersArray(4)

        if !randArrays.contains{ $0 == newArray } {
            randArrays.append(newArray)
        }
    } while randArrays.count < 4

    //...
}

答案 1 :(得分:0)

创建一个数组来存储您的数组。每当您生成新数组时,请检查.contains(_:),并继续生成新数组,直到它false为止。