groupBy
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/group-by.html
val ids = listOf<String>("id1", "id2", "id2")
print(ids.groupBy { it })
{id1=[id1], id2=[id2, id2]}
配列を渡して、条件をそれ自体の it にすると
重複しているものをまとめてくれる
val men = listOf(
"Ai" to 3,
"Bot" to 3,
"Carl" to 5,
"Dan" to 5,
)
print(men.groupBy ({it.second}, {it.first}) )
{3=[Ai, Bot], 5=[Carl, Dan]}
"name": age, のような連想配列を渡して、
2 つめの値で 1 つめの値をまとめるようにかける。
val men = listOf(
"id1" to "tom",
"id1" to "cat",
"id1" to "bob",
"id2" to "dog",
)
print(men.groupBy ({it.first}, {it.second}) )
{id1=[tom, cat, bob], id2=[dog]}
なのでこのように、おなじ ID の 人の名前をまとめることができる。
id1, id2 のそれぞれの pair 型になっている?
この出力は使いにくいので、toList() すると
[(id1, [tom, cat, bob]), (id2, [dog])]
こうなる
これは map して
id1 が it.first
[tom, cat, bob] が it.second
こうやってとることができる。
なので 2 つめの size をとって
val men = listOf(
"id1" to "tom",
"id1" to "cat",
"id1" to "bob",
"id2" to "dog",
)
val menGroupedById = men.groupBy(
{it.first}, {it.second}
).toList()
val duplicatedIdAndCount = menGroupedById.map { it ->
it.first to it.second.size
}
print(duplicatedIdAndCount)
[(id1, 3), (id2, 1)]
こうやって重複するキーと重複した数をまとめることができた
まとめ
key:value な連想配列に
arrayName.groupBy({it.first},{it.second})
これをすると、key ごとに value をまとめてくれる。
その後リストにしてmap して
1 つめ ( key ) と
2 つめ ( key に紐づく value たちの配列 ) の長さ
これをまとめると
key:duplicatedKeyCount の配列が作れる。
Top comments (0)