【发布时间】:2016-12-11 16:01:48
【问题描述】:
我正在尝试使用sorted 对元组数组进行排序。
我得到的错误是:
无法使用 (((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
}
【问题讨论】:
-
这取决于您希望如何对数据进行排序。你能提供一个示例输入和预期输出吗?
-
更新了预期输出的问题。
-
很有趣。侦探工作也很好。
标签: arrays swift sorting swift3