不知道如何避免重复代码

use*_*598 8 arrays swift

我有一些代码,它运行良好,完全符合我的要求:

            if condition1 {
                array1 += [array1[i-n]]
            } else {
                array1 += [Int (arc4random_uniform(7))]
                if array1[i] >= array1[i-n] {
                    array1[i] += 1
                }
            } //same logic, different condition and array
            if condition2 {
                array2 += [array2[i-n]]
            } else {
                array2 += [Int (arc4random_uniform(7))]
                if array2[i] >= array2[i-n] {
                    array2[i] += 1
                }
            }
Run Code Online (Sandbox Code Playgroud)

但我做了两次完全相同的事情,只是有不同的条件和不同的数组.如何避免重复逻辑?我尝试将其打包为两个元组的数组:

[ (condition1, array1) , (condition2, array2) ]
Run Code Online (Sandbox Code Playgroud)

我把它放在for循环中:

for tuple in [ (condition1, array1) , (condition2, array2) ] {
    var (condition, array) = tuple
    if condition {
        array += [array[i-n]]
    } else {
        array += [Int (arc4random_uniform(7))]
        if array[i] >= array[i-n] {
            array[i] += 1
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

并编译,但似乎数组被复制,换句话说,更改"数组"不会影响"array1"或"array2".我尝试使用tuple.0和tuple.1表示法的其他变体,但无法编译.那么我尝试使用NSArrays而不是原生的Swift数组...但我无法弄清楚如何以正确的方式做到这一点,并且无论如何认为必须有一种更简单的方法来做到这一点.

有没有简洁的方法来重述我的原始代码,以免重复逻辑?

and*_*n22 1

func alteredArray(var array:[Int], condition: Bool) -> [Int] {
    if condition {
        array += [array[i-n]]
    } else {
        array += [Int (arc4random_uniform(7))]
        if array[i] >= array[i-n] {
            array[i] += 1
        }
    }
    return array
}

array1 = alteredArray(array1, condition1)
array2 = alteredArray(array2, condition2)
Run Code Online (Sandbox Code Playgroud)

或者,如果您觉得简洁,请重命名该函数,创建array一个inout参数,删除return,并将其调用为:

alterArray(&array1, condition1)
alterArray(&array2, condition1)
Run Code Online (Sandbox Code Playgroud)