ソートにはいろんな種類がありますが、例えば バブルソート を Swift で書くとこんな感じになります。
swift
1func bubbleSort(_ arr: inout [Int]) {
2 for i in 0..<(arr.count - 1) {
3 for j in 0..<(arr.count - i - 1) {
4 if arr[j + 1] < arr[j] {
5 arr.swapAt(j, j + 1)
6 }
7 }
8 }
9}
Swift の配列のソートにはもっと賢いアルゴリズムが使われてるはずですが、大事なのはこの部分。
swift
1 if arr[j + 1] < arr[j] {
2 arr.swapAt(j, j + 1)
3 }
配列から 2 つの要素を取り出して比較して、その結果によって要素を並び替える、というのはどのソートアルゴリズムにも共通しています。そして、比較に <
を使うと数値や文字列などの限られた型にしか適用できませんが、これをクロージャを使って書くことでさまざまな型の配列をいろんな順番でソートできるようになります。
なお、ソートの際にクロージャが実際に使われる様子は、次のようにすれば観察できます。
swift
1var arr = [1, 5, 3, 7, 9, 8]
2var sortArr = arr.sorted(by: { (a:Int, b:Int) -> Bool in
3 print("comparing (a) and (b) : (a < b)")
4 return a < b
5})
6print(sortArr)
実行結果
comparing 5 and 1 : false
comparing 3 and 5 : true
comparing 3 and 1 : false
comparing 7 and 5 : false
comparing 9 and 7 : false
comparing 8 and 9 : true
comparing 8 and 7 : false
[1, 3, 5, 7, 8, 9]
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/12/30 12:48
2020/12/30 13:46
2020/12/31 06:29