gpt4 book ai didi

arrays - 克服 Swift 中的结构实现

转载 作者:行者123 更新时间:2023-11-28 13:17:53 26 4
gpt4 key购买 nike

在 Swift 中,一切都以结构而不是类的形式实现。正在传入值,但内存地址不存储它们。这是一个例子:

import UIKit


var array = Array<Int>()
array = [6,2,9,1,10,4,9,3,5,8,7]
let count = array.count

func insertSort(var arr : Array<Int>)->(){
for(var i = 1; i<arr.count-1; i++){
var j : Int
for( j = i; j > 0; j--){
if(arr[j]<arr[j-1]){
var temp = arr[j-1]
var temp2 = arr[j]
arr.removeAtIndex(j-1)
arr.insert(temp2, atIndex: j-1)
arr.removeAtIndex(j)
arr.insert(temp, atIndex: j)
}
}
}
for item in arr{
print(item)
}
}

insertSort(array)

array

我知道这不是实现插入排序的最简洁的方法,但我只是想尽可能地使用 Swift。

我的问题:通过函数中的 print 语句,我可以看到该算法有效 - 返回的列表已排序。但是,当我在底部打印数组时,Playground 返回的数组与我在顶部声明的数组相同,即未排序。我知道这是为什么(数组没有作为类实现),我只是想知道是否有办法修复它。

最佳答案

要修改传递给函数的值类型,您需要将其作为 inout 参数传递:

func insertSort(inout arr: [Int]) {
// etc.
}

insertSort(&array)

这就是 Swift.sort 的声明方式——在 playground 中尝试使用 cmd-opt 并单击它或查看 Swifter文档。

inout 应该谨慎使用——结构的一大好处是它们可以用 let 声明为不可变的,但是不可变的结构不能作为 inout 参数传递。这就是标准库声明 sortsorted 的原因,前者接受输入输出并就地排序,后者接受按值输入并返回新排序的数组。

关于arrays - 克服 Swift 中的结构实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28246789/

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