这是我在使用Swift 3时遇到的排序问题。我有一个包含许多对象的数组,如下所示。 排序方法应包括两个步骤: - 具有相同条形码的对象将并排放置在阵列中 - 具有状态A的相同条形码的对象将位于左侧,下一个是具有状态B的对象,然后是具有状态C的对象。
如何编写排序函数来涵盖这两个步骤?
Kiosk k = new Kiosk();
k.Update().GetAwaiter().GetResult();
答案 0 :(得分:1)
所以在比较器方法中你应该收到2个对象。现在做以下事情。
if(object1.barcode > object2.barcode)
return false;
else if(object1.barcode < object2.barcode)
return true;
else {
if(object1.status > object2.status)
return false;
else
return true;
}
答案 1 :(得分:1)
您可以简单地将比较链接起来:
let values: [Feed] = ...
let sortedValues: [Feed] = values.sorted { (feed1, feed2) in
feed1.barcode < feed2.barcode
|| (feed1.barcode == feed2.barcode && feed1.status < feed2.status)
}
由于您使用的是Objective-C对象,因此您也可以使用旧的NSSortDescriptor
。然而,它并没有与Swift联系,因此你需要一些施法魔法:
let barcodeSortDescriptor = NSSortDescriptor(key: "barcode", ascending: true)
let statusSortDescriptor = NSSortDescriptor(key: "status", ascending: true)
let sortedValues: [Feed] = (values as NSArray)
.sortedArray(using: [barcodeSortDescriptor, statusSortDescriptor]) as! [Feed]
当您的排序更复杂时,这尤其有用。