Think Twice
IT技術メモ | Kotlinのメモ
Created: 2019-12-07 / Updated: 2021-07-13

Kotlinで二つのリストの要素をペアにしたリストやマップにまとめる


当メモは2019-12-07に投稿されたものを加筆修正し、再掲したものです。

目次


zipメソッド

Kotlinでzipはどうやるのかな?と思って調べた内容です。
いろいろありそうだけど、とりあえずシンプルなものをメモしておきます。
KotlinにはそのものズバリのzipというメソッドがListArrayに用意されています。

listをzip
Copy
val list1 = listOf("A", "B", "C")
val list2 = listOf(100, 200, 300)
println(list1.zip(list2))
出力結果
Copy
[(A, 100), (B, 200), (C, 300)]
arrayをzip
Copy
val array1 = arrayOf("a", "b", "c")
val array2 = arrayOf(400, 500, 600)
println(array1.zip(array2))
出力結果
Copy
[(a, 400), (b, 500), (c, 600)]

出力結果の(A, 100)などの部分は、Pair<out A, out B>型となっているようです1

さて、これでペアのリストが得られました。
例えば以下のようにすれば、1番目の最初の要素"a"が取得できます。

Copy
array1.zip(array2)[0].first // => "a"

associateメソッド

さて、次はマップにまとめましょう。それにはCollection#associateを使うといいらしいです。
ペアのリストList<Pair<A, B>>をアソシエイトすると、マップMap<A, B>が出来上がるようです。

associate map
Copy
val list1 = listOf("A", "B", "C")
val list2 = listOf(100, 200, 300)
println(list1.zip(list2).associate{ it })

出力結果
Copy
{A=100, B=200, C=300}
200
いい感じにマップが得られました。

使い心地

使い心地はこんな感じです。

Copy
list1.zip(list2).associate{ it }["B"] // => 200


参考

元記事

参照

参考


  1. ところでoutってなんだ?勉強不足 ↩︎