LoginSignup
5
7

More than 5 years have passed since last update.

Swift3でタプルの配列をソートする

Last updated at Posted at 2017-10-24

忘れそうなのでメモ

通常の配列のソートについては以下を参照
[iOS8] Swiftで配列をソート(昇順・降順・逆さま)する方法

例えばこんな感じにnameとdistanceの二つのタプル配列があったとする

var List:[(name:String,distance:Int)] = [
    (name:"A",distance:13),
    (name:"B",distance:43),
    (name:"C",distance:1),
    (name:"F",distance:53),
    (name:"E",distance:53),
    (name:"D",distance:53),
]

これをdistanceの昇順に並べる際には

List.sort { (A, B) -> Bool in
            return A.distance < B.distance
        }

このAとBについては変更可能で、第一引数が前の値、第二引数が後ろの値に対応していると考えてsortに条件式を書いていく
そのあとに「.タプルの要素名」で扱う

ただしこのコードで並べ換えると以下のような並びになる
スクリーンショット 2017-10-24 11.49.45.png

これを見るとdistanceが53であるDEFの三つはnameの昇順で並び替えて欲しくなるので次のように複数の条件でソートさせた

愚直に書くと.sort
List.sort { (A, B) -> Bool in
    if A.distance == B.distance {
        return A.name < B.name
    }else if A.distance < B.distance{
        return true
    }
    return false
}

スクリーンショット 2017-10-24 11.53.00.png

これでOKのはず・・・
ただfalseを忘れるとエラー吐いてコンパイル通らないので注意
なので「return 条件式」で書くといいかもしれない

同じ内容でreturn条件式書き.sort
List.sort { (A, B) -> Bool in
    if A.distance == B.distance {
        return A.name < B.name
    }
    return A.distance < B.distance
}

以上です。

5
7
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7