How to sort an array in Swift

后端 未结 8 1926
陌清茗
陌清茗 2020-12-13 04:06

I want the Swift version of this code:

NSArray *sortedNames = [names sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
相关标签:
8条回答
  • 2020-12-13 04:52

    Any method that can be used with Objective-C sortedArrayUsingSelector: can be used with Swift sort (or sorted) provided the type of thing in the array is known. So, in your code:

    var arr : [String] = // ...
    // it is an array of String, so we can use localizedCaseInsensitiveCompare:
    sort(&arr) {return $0.localizedCaseInsensitiveCompare($1) == .OrderedAscending}
    

    Similarly:

    var events : [EKEvent] = // ...
    sort(&events) {return $0.compareStartDateWithEvent($1) == .OrderedAscending}
    
    0 讨论(0)
  • 2020-12-13 04:55

    If you want to sort your array in ascending order then use below syntax:

    var arrayName = sorted(arrayName, <)
    

    as the sorted() is the predefined function in swift and < is used to indicate that the array should be sorted in ascending order. If you want to sort the array in descending order then simply replace < with > as I have shown below:

    var arrayName = sorted(arrayName, >)
    
    0 讨论(0)
  • 2020-12-13 05:00

    If your array does not contain Custom Objects (just a string or number type):

    var sortedNames = sorted(names, <)
    

    Otherwise if you create a Custom Data Object Class containing custom properties inside:

    customDataObjectArray.sort({ $0.customProperty < $1.customProperty })
    
    0 讨论(0)
  • 2020-12-13 05:01

    You can usually use the built-in

    func sort<T : Comparable>(inout array: [T])
    

    but if you want to use localizedCaseInsensitiveCompare:, your code can be translated directly using NSArray.

    0 讨论(0)
  • 2020-12-13 05:06

    Most efficient way of sorting in SWIFT

    The use of Operator Overloading is the most efficient way to sort Strings in Swift language.

    // OPERATOR OVERLOADING
    let names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]
    var sortedNames = sorted(names, <)
    var reverseOrder = sorted(names, >)
    

    In above code > and < operators are overloaded in Swift to sort Strings.

    I have test the code in Playground and conclude that when we use operator overloading it is best for sorting Strings.

    Copy below to Playground.

    let names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]
    
    var reversed = sorted (names,
        // This is a closure
        { (s1 : String, s2 : String) -> Bool in
            return s1 > s2
        }
    )
    println(reversed)
    
    var reverseOrder = sorted(names, {s1, s2 in s1 > s2})
    
    var reverseOrder2 = sorted(names, { $0 > $1} )
    
    // OPERATOR OVERLOADING
    var reverseOrder3 = sorted(names, >)
    

    The conclusion from Playground:

    enter image description here

    From above image you can see that all other ways needs to enumerate loops for sorting 5 strings. Where as when we use Operator overloading it does not required to enumerate loop to sort strings.

    Referenced from Swift documentation

    0 讨论(0)
  • 2020-12-13 05:08

    Sorting an Array in Swift

    Define a initial names array:

    var names = [ "gamma", "Alpha", "alpha", "bravo"]
    

    Method 1:

    var sortedNames = sorted(names, {$0 < $1})
    // sortedNames becomes "[Alpha, alpha, bravo, gamma]"
    

    This can be further simplified to:

    var sortedNames = sorted(names, <)
    // ["Alpha", "alpha", "bravo", "gamma"]
    var reverseSorted = sorted(names, >)
    // ["gamma", "bravo", "alpha", "Alpha"]
    

    Method 2:

    names.sort(){$0 < $1}
    // names become sorted as this --> "[Alpha, alpha, bravo, gamma]"
    
    0 讨论(0)
提交回复
热议问题