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

时间:2015-02-28 11:12:43

标签: arrays sorting swift

我正在寻找一种基于布尔值对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
})

3 个答案:

答案 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进行了更新,之前的sortsortInPlacesortedsort。)

答案 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

的文档