こんなデータがあったとして、
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
これで、並び替えは自在ですね!