swift2 根据布尔属性对数组排序

p1tboqfb  于 2022-11-06  发布在  Swift
关注(0)|答案(4)|浏览(201)

我有一个对象数组,每个对象都有一个属性isUser: Bool,现在我想对这个数组进行排序,使带有isUser == true的对象排在第一位,然后是带有isUser == false的对象.
我需要同时过滤truefalse,然后连接这两个数组,还是可以更简单地完成?

vd2z7a6w

vd2z7a6w1#

我自己解决了这个问题。这是可能的与以下:

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

tcomlyy62#

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

extension Bool: Comparable {}

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

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

z8dt9xmd3#

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

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

eh57zj3b4#

sorted()将根据bool属性返回排序后的数组,而不改变内容。

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

相关问题