Kotlinのzipで2つのコレクションを結合する方法【初心者向け完全解説】
先生と生徒の会話形式で理解しよう
生徒
「Kotlinで2つのリストを1つにまとめたいんですが、どうすればいいですか?」
先生
「そんなときはzipという関数を使うと便利です。2つのコレクションを順番にペアとして結合できますよ。」
生徒
「ペアとして結合ってどういうことですか?」
先生
「例えば、商品名のリストと価格のリストを、1つのリストにまとめて管理することができます。実際の例で説明しますね。」
1. zipとは?
zipは、2つのコレクション(リストなど)を同じ順番で1対1のペア(Pair)として結合する関数です。
例えば、名前と年齢のリストをまとめたいときに使えます。
fun main() {
val names = listOf("Alice", "Bob", "Charlie")
val ages = listOf(25, 30, 28)
val paired = names.zip(ages)
println(paired)
}
[(Alice, 25), (Bob, 30), (Charlie, 28)]
このように、同じインデックスの要素同士がペアになったリストが作られます。
2. 長さが違う場合
2つのリストの長さが違う場合、短い方の長さに合わせて結合されます。
fun main() {
val fruits = listOf("Apple", "Banana", "Cherry")
val prices = listOf(100, 200)
val paired = fruits.zip(prices)
println(paired)
}
[(Apple, 100), (Banana, 200)]
この例では、3つ目の"Cherry"は価格がないため無視されます。
3. zipとラムダ式で加工
zipは、単にペアを作るだけでなく、ラムダ式を使って結合結果を加工することもできます。
fun main() {
val products = listOf("Laptop", "Mouse", "Keyboard")
val prices = listOf(120000, 2000, 5000)
val productInfo = products.zip(prices) { product, price ->
"$product の価格は ${price}円"
}
println(productInfo)
}
[Laptop の価格は 120000円, Mouse の価格は 2000円, Keyboard の価格は 5000円]
このようにして、すぐに使える文章リストを作ることも可能です。
4. zipの実用例:学生の名前と点数を結合
テストの結果を管理する場合、名前のリストと点数のリストを結合して使いやすくできます。
fun main() {
val students = listOf("山田", "佐藤", "鈴木")
val scores = listOf(85, 92, 78)
val results = students.zip(scores) { name, score ->
"$name さんの点数は $score 点です"
}
println(results)
}
[山田 さんの点数は 85 点です, 佐藤 さんの点数は 92 点です, 鈴木 さんの点数は 78 点です]
このように、ペアをわかりやすい文章に変換することができます。
5. zipを使うときの注意点
- 2つのコレクションの長さが異なる場合、短い方に合わせられる
- 結果は
List<Pair<T, R>>になる - ラムダ式を使えばカスタム形式で結合できる
このルールを理解しておけば、zipはデータのペアリングに非常に役立ちます。