无法通过swift中的下标进行分配

无法通过swift中的下标进行分配,swift,algorithm,data-structures,Swift,Algorithm,Data Structures,我正在尝试在Swift中实现通用算法 尽管我没有将数字定义为let变量,但我得到以下错误: 无法通过下标赋值:“numbers”是“let”常量 数字[i]=maxNumber 我的执行情况如下: func InsertionSort (numbers : [Int]) -> [Int] { var maxNumber = 0 var j = 0 var size = numbers.count-1 for (i,number) in numbers.e

我正在尝试在Swift中实现通用算法

尽管我没有将数字定义为let变量,但我得到以下错误:

无法通过下标赋值:“numbers”是“let”常量 数字[i]=maxNumber

我的执行情况如下:

func InsertionSort (numbers : [Int]) -> [Int]
{
    var maxNumber  = 0
    var j = 0
    var size = numbers.count-1

    for (i,number) in numbers.enumerated()
    {
        j = i + 1
        for index in j...size
        {
            if numbers[index] > number
            {
                maxNumber = numbers[index]
                numbers[index] = numbers[i]
                // error is thrown in the following line
                numbers[i] = maxNumber
            }
        }
    }

    return numbers
}

默认情况下,参数是不可变的。要使参数可变,需要添加一个
inout
修饰符

但是,看到您的方法返回一个数组,您可能也不希望修改参数。您应该制作参数的副本,对其进行修改,然后返回副本:

func InsertionSort (numbers : [Int]) -> [Int]
{
    var maxNumber  = 0
    var j = 0
    let size = numbers.count-1
    var numbersCopy = numbers // <------ note this line

    for (i,number) in numbers.enumerated()
    {
        j = i + 1
        for index in j...size
        {
            if numbers[index] > number
            {
                maxNumber = numbers[index]

                // note how I modified the copy here
                numbersCopy[index] = numbers[i]
                numbersCopy[i] = maxNumber
            }
        }
    }

    return numbersCopy
}
func InsertionSort(数字:[Int])->[Int]
{
var maxNumber=0
var j=0
让大小=数字。计数-1
var numbersCopy=numbers//numbers
{
maxNumber=数字[索引]
//注意我是如何在这里修改副本的
数字复制[索引]=数字[i]
numbersCopy[i]=maxNumber
}
}
}
返回号码复印件
}

默认情况下,函数参数的可能重复项是常量。@RakeshaShastri尽管该问题的答案在这里有效,我认为在这种情况下,这不是最好的解决方案。@Sweeper根据他对返回值所做的操作,他可以使用您的答案或
inout
参数。可能重复的是我错过了