【Swift】複数要素の並び替えには Tuple を使うとよい

こんなデータがあったとして、


struct User {
  var last: String
  var first: String
  var age: Int
}

let users = [
  User(last: "さとう", first: "はると", age: 19),
  User(last: "さとう", first: "しげる", age: 46),
  User(last: "いとう", first: "はると", age: 15),
  User(last: "いとう", first: "しげる", age: 50)
]

users
  .forEach { user in
    print("\(user.last)\(user.first) \(user.age)")
  }


さとうはると 19
さとうしげる 46
いとうはると 15
いとうしげる 50

並び替えたいですよね。

Tuple を使うとこんな書き方ができるんですね。


users
  .sorted(
    by: {
      ($0.last, $0.first, $0.age) < ($1.last, $1.first, $1.age)
    }
  )
  .forEach {
    print("\($0.last)\($0.first) \($0.age)")
  }


いとうしげる 50
いとうはると 15
さとうしげる 46
さとうはると 19

便利です。

少し書き換えて、年齢順で。


users
  .map {
    ($0.age, $0.last, $0.first)
  }
  .sorted(
    by: {
      $0 < $1
    }
  )
  .forEach {
    print("\($0.1)\($0.2) \($0.0)")
  }


いとうはると 15
さとうはると 19
さとうしげる 46
いとうしげる 50

これで、並び替えは自在ですね!

👉 [Swift] Tuple タプルの七不思議 #tuple - Qiita hatena-bookmark


関連ワード:  appleiOSiPhonemacmacOSSwift今さら聞けない初心者開発