kotlinのcollection入門


collectionとは

collection: List/Set/Map
collectionには読み取り専用(値が変更できない)と更新可(値が変更可)が存在する

読み取り専用(値が変更できない): List/Set/Map
更新可(値が変更できる): MutableList/MutableSet/MutableMap

基本的なcollectionの使い方

//初期化
val list = listOf(1, 2, 3)
val set = setOf(1, 2, 3)
val map = mapOf(1 to 10, 2 to 20, 3 to 30)


//値の更新はvalでも行えるため、基本的にvalで定義する
val mutableList = mutableListOf(1, 2, 3)
val mutableSet = mutableSetOf(1, 2, 3)
val mutableMap = mutableMapOf(1 to 10, 2 to 20, 3 to 30)


//値の追加
mutableList.add(4)
mutableSet.add(4)
mutableMap.put(4, 40) 

//値の削除
mutableList.remove(2)
mutableSet.remove(2)
mutableMap.remove(2)
mutableMap.remove(2, 20)

よく使用する操作関数

filter

val list = mutableListOf(1,2,3)


val arraySize = list.filter { it == 2 }.size


/*  filter内のitは配列の要素{1,2,3}を示している
        今回はlistの中から2に等しい要素をlist型で返す
        実行結果はarraySize = 1となる   */

forEach/forEachIndexed

val list = mutableListOf(1,2,3)

list.forEach { element -> //{1,2,3}が順番に入ってくる
    Log.d("test", element.toString())
    //実行結果: 1, 2, 3
}


list.forEachIndexed { element, index ->
    Log.d("test", index.toString() + "番目:" +element.toString() )
    //実行結果:1番目:1, 2番目:2, 3番目:3
    //要素に対してindexを取得したい場合に使用する
}

flatmap

val list = mutablelistOf(mutableListOf(1,2,3), mutableListOf(4,5,6))
//[[1,2,3],[4,5,6]]

val flatList = list.flatmap {num -> num}

//[1,2,3,4,5,6]
//ネストの深いList構造を平坦にしてくれる

distinct

val list = mutableListOf(1,2,3,2,3)

val distinctList = list.distinct()
//実行結果:1
//重複している要素を削除してそれ以外の要素を残している

take

val list = mutableListOf(1,2,3,4,5,6)

val takeList = list.take(3)
//実行結果:[1,2,3]
//takeで指定した数の分だけ先頭から要素を抜き出す
//後ろから抜き出したい場合はtakeLast