我有一些代码,它运行良好,完全符合我的要求:
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数组...但我无法弄清楚如何以正确的方式做到这一点,并且无论如何认为必须有一种更简单的方法来做到这一点.
有没有简洁的方法来重述我的原始代码,以免重复逻辑?
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)
| 归档时间: |
|
| 查看次数: |
178 次 |
| 最近记录: |