Swift sort array of objects based on boolean value

前端 未结 3 958
陌清茗
陌清茗 2020-12-09 07:30

I\'m looking for a way to sort a Swift array based on a Boolean value.

I\'ve got it working using a cast to NSArray:

var boolSort = NSSortDescriptor(         


        
相关标签:
3条回答
  • 2020-12-09 07:46

    Swift's arrays can be sorted in place with sort or to a new array with sorted. The single parameter of either function is a closure taking two elements and returning true if the first is ordered before the second. The shortest way to use the closure's parameters is by referring to them as $0 and $1.

    For example (to sort the true booleans first):

    // In-place:
    array.sort { $0.selected && !$1.selected }
    
    // To a new array:
    array.sorted { $0.selected && !$1.selected }
    

    (edit: Updated for Swift 3, 4 and 5, previously sort was sortInPlace and sorted was sort.)

    0 讨论(0)
  • 2020-12-09 07:47

    New (for Swift 1.2)

    return results.sort { $0.selected && !$1.selected }
    

    Old (for Swift 1.0)

    Assuming results is of type [VDLProfile] and VDLProfile has a Bool member selected:

    return results.sorted { $0.selected < $1.selected }
    

    See documentation for sorted

    0 讨论(0)
  • 2020-12-09 07:49

    Swift’s standard library provides a function called sorted, which sorts an array of values of a known type, based on the output of a sorting closure that you provide

    reversed = sorted(array) { $0 > $1 }
    

    reversed will be a new array which will be sorted according to the condition given in the closure.

    0 讨论(0)
提交回复
热议问题