基于布尔值的对象快速排序数组

我正在寻找一种方法来排序一个雨燕数组的布尔值为基础。

我使用了 NSArray 的强制转换:

var boolSort = NSSortDescriptor(key: "selected", ascending: false)
var array = NSArray(array: results)
return array.sortedArrayUsingDescriptors([boolSort]) as! [VDLProfile]

但我在找斯威夫特的变体,有什么想法吗?

更新 多亏了 Arkku,我用下面的代码修复了这个问题:

return results.sorted({ (leftProfile, rightProfile) -> Bool in
return leftProfile.selected == true && rightProfile.selected != true
})
27618 次浏览

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和5更新,以前的 sortsortInPlacesortedsort。)

Swift 的标准库提供了一个名为 sort 的函数,该函数根据您提供的排序闭包的输出对已知类型的值数组进行排序

reversed = sorted(array) { $0 > $1 }

reversed将是一个新的数组,它将根据闭包中给出的条件进行排序。

全新(适用于 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 }

请参阅 解决了的文档