我正在尝试在快速游乐场中进行简单的排序功能,但是我收到以下错误:
Playground execution failed: error: <EXPR>:20:22: error: '[Int]' is not a subtype of '@lvalue $T2'
swap(&a,k,j) //Here in &a
我写了以下代码:
let arr:[Int] = [1,3,53,24,52,1,234,5,3]
func swap(inout a:[Int], num1:Int, num2:Int){
var value = a[num1]
a[num1] = a[num2]
a[num2] = value
}
func sort(a:[Int]){
var j = 0
var k = 0
for (k = j ; k<=a.count; k++){
if(k != a.count){
if(a[k] < a[j]){
swap(&a,k,j)
}
}else{
j++;
}
}
}
print ("\(sort(arr)) is the array")
知道为什么这不起作用?我错误地引用了数组,谢谢!
更新: 正如Martin R指出错误,这里是更正后的代码:
var arr:[Int] = [1,3,53,24,52,1,234,5,3]
排序功能:
func sort(inout a:[Int]) -> [Int]{
var j = 0
var k = 0
for (k = j ; k <= a.count; k++){
if(k != a.count){
if(a[k] < a[j]){
swap(&a,j,k)
}
}else{
j++;
k = j
}
}
return a
}
最后:
print ("\(sort(&arr)) is the array")
答案 0 :(得分:2)
中的本地参数
a
func sort(a:[Int])
默认为常量。既然你想修改传递的数组,你就有了
以inout
函数中的相同方式将该参数声明为swap()
:
func sort(inout a:[Int])
此外,传递的数组必须是变量:
var arr:[Int] = [1,3,53,24,52,1,234,5,3]
并且当它作为参数传递时,你必须在它前面添加&符号 对于输入输出参数,表示可以通过函数修改它:
sort(&arr)
println(arr)
另请注意
print ("\(sort(arr)) is the array")
不会打印数组结果,因为sort()
没有返回值。