我有3个Int类型的数组,每个数组中有5个值。我正在尝试创建一个根据条件替换值的函数。例如,array1,如果索引的值在2-5之间,则替换为1-6之间随机生成的数字。
这是我到目前为止所拥有的
import Foundation
func newRandomNumbers(#array1: [Int], array2: [Int], array3: [Int]) {
for i in 0..<5 {
switch (array1[i]) {
case 2, 3, 4, 5:
let randomNumber = Int(1 + arc4random() % 6)
array1[i] = randomNumber
break;
default:
break;
}
switch (array2[i]) {
case 2, 3, 4, 5:
array2[i]
break;
default:
break;
}
switch (array3[i]) {
case 1, 2, 3, 4, 5:
array3[i]
break;
default:
break;
}
}
}
我收到错误“无法分配类型'Int'的不可变值”
当我重写一个执行相同目的的简化函数时,我没有得到错误,但奇怪的是并非所有数字都被替换。
import Foundation
var newArray = [2,3,4,5,6]
func newRandom(#array1: [Int]){
for i in 0..<5 {
switch(array1[i]) {
case 2, 3, 4, 5:
let randomNumber = Int(1 + arc4random() % 6)
newArray[1] = randomNumber
default:
break;
}
}
}
newRandom(array1: newArray)
newArray
不确定如何解决。关于如何清理我的代码的建议也将受到赞赏。谢谢!
答案 0 :(得分:1)
“无法分配给'Int'类型的不可变值”是因为参数实际上是常量。你可以阅读这一行:
func newRandomNumbers(#array1: [Int], array2: [Int], array3: [Int])
为:
func newRandomNumbers(#array1 let array1: [Int], let array2: [Int], let array3: [Int])
您可以通过将var
放在参数前面并返回数组来更改它。另一种选择是使用&
使其成为引用,因此您不必返回新数组。
答案 1 :(得分:0)
我建议你研究一下数组的map函数: https://developer.apple.com/library/ios/documentation/General/Reference/SwiftStandardLibraryReference/Array.html
你会使用例如:
array.map {
if ($0 satisfies condition) {
generate random number
}
}
答案 2 :(得分:0)
您可以对每个功能参数使用inout
,并在调用函数时在变量名前添加&
,它将在适当的位置修改数组:
func newRandom(inout myArray: [Int]) {
for (index, element) in enumerate(myArray) {
switch element {
case 2...5:
myArray[index] = Int(1 + arc4random() % 6)
default:
break
}
}
}
var newArray = [2,3,4,5,6]
newRandom(&newArray)
println(newArray) // "newArray" was modified, contains random numbers
注意:
switch element {
case 2...5:
相当于:
if element >= 2 && element <= 5 {
SWIFT 2.0更新:
从Swift 2.0开始,enumerate
现在要在序列本身上调用。另外,println
已被弃用,转而使用print
:
func newRandom(inout myArray: [Int]) {
for (index, element) in myArray.enumerate() {
switch element {
case 2...5:
myArray[index] = Int(1 + arc4random() % 6)
default:
break
}
}
}
var newArray = [2,3,4,5,6]
newRandom(&newArray)
print(newArray)