gpt4 book ai didi

arrays - 如何使用 sorted 对元组数组进行排序? (无法使用类型参数列表调用 'sorted')

转载 作者:可可西里 更新时间:2023-11-01 02:10:31 26 4
gpt4 key购买 nike

我正在尝试使用 sorted 对元组数组进行排序。

我得到的错误是:

Cannot invoke 'sorted' with an argument list of type (((MyClass1, MyClass2)) -> Bool)

数组是这样创建的:

class MyClass1 {
var id: Int
init(id:Int) { self.id = id }
}

class MyClass2 {
var id2: Int
init(id2:Int) { self.id2 = id2 }
}
let array1 = [MyClass1(id:4), MyClass1(id:3), MyClass1(id:2), MyClass1(id:1)]
let array2 = [MyClass2(id2:1), MyClass2(id2:2), MyClass2(id2:3), MyClass2(id2:4)]
var tuples = zip(array1, array2)

我尝试过的:

tuples = tuples.sorted { (left, right) -> Bool in
return left.1.id2 > right.1.id2
}

tuples = tuples.sorted { $0.1.id2 > $1.1.id2 }

tuples = tuples.sorted(by: { (first: (MyClass1, MyClass2), second: (MyClass1, MyClass2)) -> Bool in
return first.1.id2 > second.1.id2
})

预期输出为(伪,手写):

[(myClass1WithId_1, myClass2WithId2_4),(myClass1WithId_2, myClass2WithId2_3),(myClass1WithId_3, myClass2WithId2_2),(myClass1WithId_4, myClass2WithId2_1)]

按 myClass2.id2 降序排列的元组。


更新

我找到了解决该问题的方法。该错误似乎是错误的/误导性的。

我可以在将结果分配给新变量时对其进行排序:

let tuples2 = tuples.sorted { (left, right) -> Bool in
return left.1.id2 > right.1.id2
}

将其分配给现有变量时出现上述错误:

tuples = tuples.sorted { (left, right) -> Bool in
return left.1.id2 > right.1.id2
}

最佳答案

I am trying to sort an array of tuples

但问题是您的元组 不是数组。 (它是一个叫做 Zip2Sequence 的东西。)解决方案是将它强制为一个数组:

var tuples = Array(zip(array1, array2))

现在您的原始代码可以工作了:

let array1 = [MyClass1(id:4), MyClass1(id:3), MyClass1(id:2), MyClass1(id:1)]
let array2 = [MyClass2(id2:1), MyClass2(id2:2), MyClass2(id2:3), MyClass2(id2:4)]
var tuples = Array(zip(array1, array2)) // *
tuples = tuples.sorted { (left, right) -> Bool in
return left.1.id2 > right.1.id2
}

您的 解决方案起作用的原因是排序序列产生数组。因此,您不能将数组重新分配给序列变量 (tuples),但可以将其分配给不同的变量 (tuples2)。我的解决方案一个数组开始,因此生成的排序数组可以赋值回同一个变量。

关于arrays - 如何使用 sorted 对元组数组进行排序? (无法使用类型参数列表调用 'sorted'),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41088103/

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