我正在寻找一种基于布尔值对Swift数组进行排序的方法。
我已经使用强制转换为NSArray工作了:
var boolSort = NSSortDescriptor(key: "selected", ascending: false)
var array = NSArray(array: results)
return array.sortedArrayUsingDescriptors([boolSort]) as! [VDLProfile]
但我正在寻找Swift变种,任何想法?
更新 感谢Arkku,我已设法使用以下代码解决此问题:
return results.sorted({ (leftProfile, rightProfile) -> Bool in
return leftProfile.selected == true && rightProfile.selected != true
})
答案 0 :(得分:77)
Swift的数组可以使用sort
或使用sorted
的新数组进行排序。任一函数的单个参数是一个带有两个元素的闭包,如果第一个在第二个元素之前排序,则返回true
。使用闭包参数的最短方法是将它们称为$0
和$1
。
例如(首先对真正的布尔值进行排序):
// In-place:
array.sort { $0.selected && !$1.selected }
// To a new array:
array.sorted { $0.selected && !$1.selected }
(编辑:针对Swift 3和4进行了更新,之前的sort
为sortInPlace
且sorted
为sort
。)
答案 1 :(得分:1)
Swift的标准库提供了一个名为sorted的函数,它根据您提供的排序闭包的输出对已知类型的值数组进行排序
reversed = sorted(array) { $0 > $1 }
reversed
将是一个新数组,将根据闭包中给出的条件进行排序。
答案 2 :(得分:1)
新(适用于Swift 1.2)
return results.sort { $0.selected && !$1.selected }
旧(适用于Swift 1.0)
假设results
的类型为[VDLProfile]
且VDLProfile的Bool
成员selected
:
return results.sorted { $0.selected < $1.selected }
请参阅sorted
的文档