我有一个对象数组,每个对象都有一个属性isUser: Bool,现在我想对这个数组进行排序,使带有isUser == true的对象排在第一位,然后是带有isUser == false的对象.我需要同时过滤true和false,然后连接这两个数组,还是可以更简单地完成?
isUser: Bool
isUser == true
isUser == false
true
false
vd2z7a6w1#
我自己解决了这个问题。这是可能的与以下:
self.objectsOfFoo.sortInPlace { $0.isUser && !$1.isUser}
tcomlyy62#
您可以扩展Bool以使其具有可比性:处理true == 1和false == 0。这样做的好处是代码变得更容易阅读:
Bool
true == 1
false == 0
extension Bool: Comparable {} public func < (lhs: Bool, rhs: Bool) -> Bool { return Int(lhs) < Int(rhs) } self.objectsOfFoo.sortInPlace { $0.isUser > $1.isUser }
z8dt9xmd3#
您可以在Swift 3.0中对Array进行排序,如下所示。我已经尝试在Swift 3.0中使用Bool属性
Swift 3.0
Array
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 }
eh57zj3b4#
sorted()将根据bool属性返回排序后的数组,而不改变内容。
let sortedArray = unsortedArray.sorted(by:{ !$0.isUser && $1.isUser})
4条答案
按热度按时间vd2z7a6w1#
我自己解决了这个问题。这是可能的与以下:
tcomlyy62#
您可以扩展
Bool
以使其具有可比性:处理true == 1
和false == 0
。这样做的好处是代码变得更容易阅读:z8dt9xmd3#
您可以在
Swift 3.0
中对Array
进行排序,如下所示。我已经尝试在Swift 3.0
中使用Bool
属性eh57zj3b4#
sorted()将根据bool属性返回排序后的数组,而不改变内容。