zipメソッド
Kotlinでzipはどうやるのかな?と思って調べた内容です。いろいろありそうだけど、とりあえずシンプルなものをメモしておく。
Kotlinにはそのものズバリの zip というメソッドが List
list.zip
val list1 = listOf("A", "B", "C") val list2 = listOf(100, 200, 300) println(list1.zip(list2))
Output
[(A, 100), (B, 200), (C, 300)]
array.zip
val array1 = arrayOf("a", "b", "c") val array2 = arrayOf(400, 500, 600) println(array1.zip(array2))
Output
[(a, 400), (b, 500), (c, 600)]
出力結果の (A, 100)
などの部分は、Pair<out A, out B>
型となっているようです(ところでoutってなんだ?勉強不足)。
さて、これでペアのリストが得られた。例えば以下のようにすれば、1番目の最初の要素 "a" が取得できる。
array1.zip(array2)[0].first // => "a"
associateメソッド
さて、次はマップにまとめたい。それには Collection#associate
を使うといいらしい。ペアのリスト List<Pair<A, B>>
をアソシエイトすると、マップ Map<A, B>
が出来上がるようだ。
associate map
val list1 = listOf("A", "B", "C") val list2 = listOf(100, 200, 300) println(list1.zip(list2).associate{ it })
Output
{A=100, B=200, C=300} 200
いい感じにマップが得られた。使い心地はこんな感じ。
list1.zip(list2).associate{ it }["B"] // => 200
参考
zip - Kotlin Programming Language
Pair - Kotlin Programming Language