关于swift:根据布尔属性对数组进行排序

Sort array according to boolean property

我有一个对象数组。每个对象都有一个属性isUser: Bool。因此,现在我要对该数组进行排序,以使带有isUser == true的对象首先出现在数组中,然后是带有isUser == false的对象。

我是否需要同时过滤truefalse,然后将两个数组连接起来,还是可以更简单地完成呢?


您可以扩展Bool以使其具有可比性:对待true == 1false == 0。好处是您的代码变得更容易阅读:

1
2
3
4
5
6
7
extension Bool: Comparable {}

public func < (lhs: Bool, rhs: Bool) -> Bool {
    return Int(lhs) < Int(rhs)
}

self.objectsOfFoo.sortInPlace { $0.isUser > $1.isUser }


我自己解决了。可能存在以下情况:

1
self.objectsOfFoo.sortInPlace { $0.isUser && !$1.isUser}

sorted()将基于bool属性返回排序后的数组,而不会更改内容。

1
let sortedArray = unsortedArray.sorted(by:{ !$0.isUser && $1.isUser})

您可以在Swift 3.0中对Array进行排序,如下所示。我尝试使用Swift 3.0

中的Bool属性

1
2
3
4
5
6
7
8
9
10
11
yourArray.sort { (item1, item2) -> Bool in
                     var check1: Int = 0
                     var check2: Int = 0
                     if item1.isUser != nil, item1.isUser == true {
                        check1 = 1
                     }
                     if item2.isUser != nil, item2.isUser == true {
                        check2 = 1
                     }
                     return check1 > check2
                }