首页 > 解决方案 > Kotlin 中简洁的 2D 原始数组初始化

问题描述

我正在尝试在 Kotlin 中定义大量原始 2D 数组,但它似乎缺乏一种简洁的方法。例如,在 C++ 中,您可以执行以下操作:

int arr[2][5] =
    {{1,8,12,20,25},
     {5,9,13,24,26}};

我在 Kotlin 中能想到的最好的方法是

val arr = arrayOf(
            intArrayOf(1,8,12,20,25),
            intArrayOf(5,9,13,24,26))

Java(毫无意义的重复)甚至在这方面击败了 Kotlin

int[][] arr = new int[][]
        {{1,8,12,20,25},
         {5,9,13,24,26}};

虽然额外的样板文件不是世界末日,但它很烦人。

标签: arrayskotlinsyntax

解决方案


正如另一个答案指出的那样,没有内置的更短的语法。您的arrayOf()&c 示例是常规解决方案。

(在JavaKotlin中有关于集合字面量的提议,但它们非常 有争议,因为有很多可能性:例如,你想要一个 ArrayList 还是一个 LinkedList 或其他一些实现?它应该是可变的还是不可变的?等等. 当您添加特殊语法来指定它时,它比现有函数长!)

但是,如果在您的情况下简洁真的很重要,您可以为内置函数定义较短的别名,例如:

inline fun <reified T> a(vararg e: T) = arrayOf(*e)

 

fun i(vararg e: Int) = intArrayOf(*e)

然后你的例子归结为:

val arr = a(i(1, 8, 12, 20, 25),
            i(5, 9, 13, 24, 26))

推荐阅读