【Kotlin】2次元配列・コレクション操作関数

Kotlinでコレクションを操作する関数のメモ

ここでは、忘れやすいKotlinでの配列の宣言や、コレクションを操作するときに便利な関数などを紹介します。

目次

コレクション操作関数まとめ

配列

Kotlinではあまり使わないけど、ごく稀に必要なときに思い出せない、配列の宣言など。

配列の宣言と初期化

書き方が思い出せない配列の宣言。

    // サイズ5の配列を生成して0で初期化
    val array = Array(5) { 0 }
    array.forEachIndexed { index, i -> println("index[$index]=$i") }
    // index[0]=0
    // index[1]=0
    // index[2]=0
    // index[3]=0
    // index[4]=0

    // サイズ5の配列を生成して0〜4で初期化
    val array = Array(5) { it }
    array.forEachIndexed { index, i -> println("index[$index]=$i") }
    // index[0]=0
    // index[1]=1
    // index[2]=2
    // index[3]=3
    // index[4]=4

2次元配列の宣言と初期化

いざコードを書こうとして必ず手が止まる、2次元配列の宣言。

    // サイズ5×5の配列を生成して0で初期化
    val array2d = Array(5) { Array(5) { 0 } }
    repeat(array2d.size) { i ->
        repeat(array2d[i].size) { j ->
            println("index[$i][$j]=${array2d[i][j]}")
        }
    }
    // index[0][0]=0
    // index[0][1]=0
    // index[0][2]=0
    // index[0][3]=0
    // index[0][4]=0
    // ・・・省略・・・
    // index[4][0]=0
    // index[4][1]=0
    // index[4][2]=0
    // index[4][3]=0
    // index[4][4]=0

    // サイズ5×5の配列を生成して0〜4で初期化
    val array2d = Array(5) { Array(5) { it } }
    repeat(array2d.size) { i ->
        repeat(array2d[i].size) { j ->
            println("index[$i][$j]=${array2d[i][j]}")
        }
    }
    // index[0][0]=0
    // index[0][1]=1
    // index[0][2]=2
    // index[0][3]=3
    // index[0][4]=4
    // ・・・省略・・・
    // index[4][0]=0
    // index[4][1]=1
    // index[4][2]=2
    // index[4][3]=3
    // index[4][4]=4

コレクション

コレクションを操作するときに便利な関数など。

イミュータブル(読み取り専用)なコレクションを生成

    val numbers = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
 // リスト以外にも setOf(・・・)、 mapOf(・・・) が使える

ミュータブル(書き込み可能)なコレクションを生成

    val numbers = mutableListOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
 // リスト以外にも mutableSetOf(・・・)、mutableMapOf(・・・) が使える

List -> Mapに変換(associate, associateBy)

    val numbers = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

    // associate
 // 要素ごとのPairを作り、Mapに変換する
    println(numbers.associate { it to it * 2 })
 {1=2, 2=4, 3=6, 4=8, 5=10, 6=12, 7=14, 8=16, 9=18, 10=20}

    // associateBy
 // 各要素の値をバリュー、ラムダ式の結果をキーとしたMapに変換する
    println(numbers.associateBy { it * 2 })
 {2=1, 4=2, 6=3, 8=4, 10=5, 12=6, 14=7, 16=8, 18=9, 20=10}

ネストしたリストの要素を平坦にする(flatMap, flatten)

    // flatMap
    val list = listOf(listOf(1, 2), listOf(3, 4), listOf(5))
    println(list.flatMap { it })
    // [1, 2, 3, 4, 5]

    // flatten()
    val list = listOf(listOf(1, 2), listOf(3, 4), listOf(5))
    println(list.flatten())
    // [1, 2, 3, 4, 5]

指定した要素がリストに存在するかを判定する(contains)

    val numbers = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
    println(numbers.contains(10)) // true
    println(numbers.contains(11)) // false

畳み込み処理(fold, reduce)

    // fold
    val evenNums = listOf(2, 4, 6, 8, 10)
    val summary = evenNums.fold(initial = 1) { sum, element -> sum + element } // 初期値=1
    println(summary) // 31  (1+2) -> (3+4) -> (7+6) -> (13+8) -> (21+10)

    // reduce
    val evenNums = listOf(2, 4, 6, 8, 10)
    val summary = evenNums.reduce { acc, element -> acc + element }
    println(summary) // 30 (2+4) -> (6+6) -> (12+8) -> (20+10)

共通した要素の集合を求める(intersect)

    val setA = setOf(1, 2, 3, 4, 5)
    val setB = setOf(2, 4, 6, 8, 10)
    println(setA.intersect(setB)) // [2, 4]

リストから指定した要素を取り除いた新しいリストを返す(minus)

    val letters = listOf("l", "e", "t", "t", "e", "r", "s")
    val exclude = listOf("e", "t")
    println(letters.minus(exclude)) // ["l", "r", "s"]

参考

Java言語が長かった人には特におすすめ。というかKotlinやるならこれを読まないと損します。

メイン言語がJavaの方でこれからKotlinを学習するならまずはこの書籍。これ以上最適は書籍はないといっても過言ではありません。Javaの記述がKotlinだとこう書ける!を丁寧に解説。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次