takeda_san’s blog

KotlinとVRを頑張っていく方向。

Kotlinで多次元配列ってどう書くんですか?

きっかけ

配列、つかってますか?
こと業務システムにおいては使う機会ってめったにないですよね。
ふと思ったわけですKotlinで配列ってどう書くんだっけ…

Kotlinで配列

まず心のふるさとJavaだとこう。
なんとなくint型の箱(ものを投げないでください)が3つできてそれに番号が振られているイメージがして、直感的ですね。

public static void main(String[] args) {
    int[] myArray = new int[3];
    myArray[0] = 10;
    myArray[1] = 20;
    myArray[2] = 30;

    for (int number : myArray) {
        System.out.println(number);
    }
}

// 実行結果
// 10
// 20
// 30

Kotlinだとこう。
さっきのJavaのコードを張り付けてIntelliJ IDEAさんに変換してもらいましょう。

val myArray = IntArray(3)
myArray[0] = 10
myArray[1] = 20
myArray[2] = 30

myArray.forEach {
    println(it)
}

// 実行結果
// 10
// 20
// 30

変数の宣言方法が変わりましたね。

IntArray(3)

Javaの方の違和感がちょっと薄れたかなという感じ。
クラスっぽくないのにnewしてんじゃんこれみたいな。

Kotlinの多次元配列

はい、さて本題。
多次元配列はどう書くのですかね。

IntArray(2)(3)

うん、まぁ違うよね。
困ったときはJavaで書いてみましょう。

public static void main(String[] args) {
    int[][] myArray = new int[2][3];
    myArray[0][0] = 10;
    myArray[0][1] = 20;
    myArray[0][2] = 30;
    myArray[1][0] = 15;
    myArray[1][1] = 25;
    myArray[1][2] = 35;

    for (int[] numberArray : myArray) {
        for (int number : numberArray) {
            System.out.println(number);
        }
    }
}

ちょっと複雑になりましたが、これも箱のイメージ(ものを!ものを投げないでください!)に反するものではないので理解しやすいですね。
よし、これをKotlinファイルにコピペしてみましょう。

fun main() {
    val myArray = Array(2) { IntArray(3) }
    myArray[0][0] = 10
    myArray[0][1] = 20
    myArray[0][2] = 30
    myArray[1][0] = 15
    myArray[1][1] = 25
    myArray[1][2] = 35

    myArray.forEach { numberArray ->
        numberArray.forEach {
            println(it)
        }
    }
}

あー、こうなりましたか…

val myArray = Array(2) { IntArray(3) }

つまり3次元配列になると…

val myArray = Array(2) { Array(3) { IntArray(4) } }

なるほどね、マトリョシカみたいな宣言の仕方になると…
ここまでくるとJavaの方が直感的と言えそうですね。