arrays - 不确定如何避免在此处重复代码

标签 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
                }
            }

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

[ (condition1, array1) , (condition2, array2) ]

我把它放在一个 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
        }
    }
}

并且编译了,但似乎数组被复制了,换句话说,改变“array”并没有影响“array1”或“array2”。我尝试过使用 tuple.0 和 tuple.1 表示法的其他变体,但无法编译。所以我尝试使用 NSArrays 而不是原生 Swift 数组……但我不知道如何以正确的方式做到这一点,无论如何我认为必须有更简单的方法来做到这一点。

是否有一种简洁的方式来重述我的原始代码以避免重复逻辑?

最佳答案

curry 吧!

func func1(var a: [Int]) -> [Int] {
    a += [a[i-n]]
    return a
}

func func2(var a: [Int]) -> [Int] {
    a+= [Int (arc4random_uniform(7))]
    if a[i] >= a[i-n] {
        a[i] += 1
    }
    return a
}

func function(condition: Bool) -> [Int] -> [Int] {
    switch condition {
    case true:
        return func1
    case false:
        return func2
    }
 }

array1 = function(condition1)(array1)
array2 = function(condition2)(array2)

(andyvn22 提到的相同的 inout 东西也可以在这里应用。)

关于arrays - 不确定如何避免在此处重复代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27905240/

相关文章:

JavaScript:将对象属性附加为子元素

c++ - 从字符串文字初始化字符数组是数组复制初始化的情况吗?

javascript - 如何清除 typescript 中数组中的元素值?

swift - 仅从 Firebase 检索新值

swift - 我试图将我的 Sprite 定位在手机的底部中心

swift - Alamofire 参数编码中的 POST 请求返回 GET 响应

arrays - 在 Rust 中初始化字符串数组

ios - 断断续续的 CATextLayer 动画 : fontSize + position concurrently

swift - 我需要更改此代码才能使文本显示在共享表中?

ruby - 从数组中选择单个哈希,其中一个哈希元素具有最高值