一尘不染

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

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
})

阅读 250

收藏
2020-07-07

共1个答案

一尘不染

斯威夫特的阵列可以在适当的位置进行排序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和Swift 4更新,以前sortsortInPlaceand sortedsort。)

2020-07-07