gpt4 book ai didi

arrays - Swift 为 InsertionSort 算法修改 Int 数组

转载 作者:行者123 更新时间:2023-11-28 07:04:12 24 4
gpt4 key购买 nike

我是 Swift 的新手,我想知道我应该如何修改包含在我的 Int[] 中的 Int?我做的就像我在 Java 中做的那样,但显然,它不起作用:我得到一个 Cannot assign to immutable value of type 'Int' 编译错误。

这是我的代码:

import Foundation

func createRandomArray(length: Int) -> [Int]{
var random = [Int]()
for index in 0...length{
random.append(Int(arc4random_uniform(100)))
}
return random
}

func insertionSort(toSort: [Int]) -> [Int]{
var length = toSort.count
for index in 1...length-1{
var key = toSort[index]
var previous = index-1
while(previous>0 && toSort[previous]>key){
// ERROR IS THERE
toSort[previous+1] = toSort[previous]
previous--
}
}
return toSort
}

var array = createRandomArray(10)

print(array)

print(insertionSort(array))

我认为使用 var 而不是 let 会给出一个可变对象,所以这就是我有点迷路的原因。

感谢帮助

编辑:

感谢@vacawama,我得到了这个有效的答案:

import Foundation

func createRandomArray(length: Int) -> [Int]{
var random = [Int]()
for index in 0...length{
random.append(Int(arc4random_uniform(100)))
}
return random
}

func insertionSort(var toSort: [Int]) -> [Int]{
for firstIterator in 1...toSort.count-1{
var currentValue = toSort[firstIterator]
var previousPosition = firstIterator-1
while(previousPosition>=0 && toSort[previousPosition]>currentValue){
swap(&toSort[previousPosition+1], &toSort[previousPosition])
previousPosition--
}
}
return toSort
}


var array = createRandomArray(10)

print(array)

print(insertionSort(array))

最佳答案

Swift 5.x 及更高版本的更新答案

自从我回答这个问题以来的 7 年里,Swift 发生了很多变化。将 var 插入函数头以使数组可修改不再有效。现代的做法是将 var toSort = toSort 作为函数体的第一行。

这是使用现代 Swift 更新对 OP 代码的修改:

func createRandomArray(_ length: Int) -> [Int] {
var random = [Int]()
for _ in 0..<length {
random.append(Int.random(in: 0..<100))
}
return random
}

func insertionSort(_ toSort: [Int]) -> [Int] {
var toSort = toSort
for firstIterator in 1..<toSort.count {
let currentValue = toSort[firstIterator]
var previousPosition = firstIterator - 1
while (previousPosition >= 0 && toSort[previousPosition] > currentValue) {
toSort.swapAt(previousPosition + 1, previousPosition)
previousPosition -= 1
}
}
return toSort
}

var array = createRandomArray(10)

print(array)

print(insertionSort(array))

createRandomArray 的较短版本:

func createRandomArray(_ length: Int) -> [Int] {
(0..<length).map { _ in .random(in: 0..<100) }
}

注意:如果传递的是空数组,您的 insertionSort() 将崩溃。将此 guard 语句添加到函数体的开头以防止:

guard !toSort.isEmpty else { return toSort }

Swift 1.0 的原始答案(现已过时)

默认情况下,数组参数在被调用函数中是不可变的。如果要修改传递给 insertionSort 的数组副本,请在函数头中的 toSort 之前添加 var

func insertionSort(var toSort: [Int]) -> [Int]{

关于arrays - Swift 为 InsertionSort 算法修改 Int 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31222370/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com