【问题标题】:cannot assign through subscript in swift不能在swift中通过下标分配
【发布时间】:2018-10-16 06:15:26
【问题描述】:

我正在尝试在 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
}

【问题讨论】:

标签: swift algorithm data-structures


【解决方案1】:

默认情况下参数是不可变的。要使参数可变,您需要添加 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
}

【讨论】:

  • 是的,我错过了
猜你喜欢
  • 2018-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-08
  • 2016-07-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多