★ クロージャで第一引数と第二引数を比較してソートする。
let numList = [1 ,2 ,3 ,4 ,5]
let value = numList.sorted{(a:Int, b:Int) -> Bool in
return a > b
}
value
//=> value = [5 ,4 ,3 ,2 ,1]
// ※ 上記を省略したコード
let value1 = numList.sorted{$0 > $1}
★ Dictionaryのsort
// Dictionaryはタプルとしてsortの中で扱われる
var dictionary = [10: 1, 8: 2, 3: 3, 4: 7]
// タプルの0番目(key)を比較している
var sortDict = dictionary.sorted{ $0.0 < $1.0 }
sortDict
//=> [(3, 3), (4, 7), (8, 2), (10, 1)]
★ sorted(by:)はソートした配列を返す
var a = [5, 3, 1, 4, 2]
var b = a.sorted(by: <)
//=> b = [1, 2, 3, 4, 5]
var c = a.sorted(by: >)
//=> c = [5, 4, 3, 2, 1]
★ sort(by:)は配列自体をソートする
var a = [5, 3, 1, 4, 2]
a.sort(by: <)
//=> a = [1, 2, 3, 4, 5]
var b = [5, 3, 1, 4, 2]
var sign: (Int, Int) -> Bool = (<)
b.sorted(by: sign)
//=> [1, 2, 3, 4, 5]
★ 偶数を順番に並べた後に、奇数を順番に並べる
let intArray = [1, 2, 3, 4, 5, 10, 20, 30, 111, 112]
let sortEvenArray = intArray.sorted() {
// 偶数を順番に並べた後に、奇数を順番に並べる
$0 % 2 == 0 && $1 % 2 != 0
}
sortEvenArray
//=> [2, 4, 10, 20, 30, 112, 1, 3, 5, 111]
★ structのプロパティでソートする
struct A {
var a: String = ""
init(_ a: String) {
self.a = a
}
}
var b = [A("b"),A("d"),A("a"),A("c")]
let c = b.sorted {
$0.a < $1.a
}
c
//=> [A(a: "a"), A(a: "b"), A(a: "c"), A(a: "d")]