gpt4 book ai didi

arrays - 排序中的 Swift For 循环枚举不同

转载 作者:行者123 更新时间:2023-11-28 15:08:23 24 4
gpt4 key购买 nike

我正在尝试对以下数组进行手动排序。

这里的问题是,从“for 循环枚举”(标记为//(2))读取项目与将其作为下标读取(标记为//(1))相比,结果会有所不同。这可能是隐藏在我眼睛后面的一个小问题。珍惜你的时间。

var mySortArray : Array<Int> = []

mySortArray = [1,5,3,3,21,11,2]

for (itemX,X) in mySortArray.enumerated() {

for (itemY,Y) in mySortArray.enumerated() {

// if mySortArray[itemX] < mySortArray[itemY] // (1)
if X < Y // (2)
{
//Swap the position of item in the array
mySortArray.swapAt(itemX, itemY)
}

}
}

print(mySortArray)

// Prints [1, 2, 3, 3, 5, 11, 21] ( for condition // (1))
// Prints [2, 1, 3, 5, 11, 3, 21] ( for condition // (2))

mySortArray = [1,5,3,3,21,11,2]
print("Actual Sort Order : \(mySortArray.sorted())")
// Prints Actual Sort Order : [1, 2, 3, 3, 5, 11, 21]

最佳答案

这里的问题是函数 .enumerated() 返回一个新序列并迭代它。将其视为一个新数组。

因此,您在这里使用 3 个不同的数组。

你有一个未排序的数组,你想修复它。让我们将其称为 w(“工作数组”),然后您将得到数组 x 和数组 y

因此,w[1,5,3,3,21,11,2]xy 实际上与开头的 w 相同。

现在您得到了需要交换的前两个值...

valueX 位于 x (5) 的索引 1 处。 valueY 位于 y (3) 的索引 2 处。

然后你交换它们......在 w 中。

所以现在 w[1,3,5,3,21,11,2]xy 不变。

所以现在你的索引被抛弃了。您正在将 x 中的项目与 y 中的项目进行比较,然后在 we 中交换它们,这是完全不同的。

您需要始终使用一个数组。

当然...还有一个问题是你的功能目前很慢。 O(n^2) 并且还有更高效的排序方式。

如果您将此作为学习如何编写排序算法的练习,那么请继续。如果不是,您真的应该使用 .sort() 函数。

您真正想要做的是根本不使用 .enumerated()。只需使用 ints 获取(和交换)w 中的值。

即类似

for indexX in 0..<w.count {
for indexY in indexX..<w.count {
// do some comparison stuff.
// do some swapping stuff.
}
}

关于arrays - 排序中的 Swift For 循环枚举不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48068339/

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