Kotlin中的简洁2D基本数组初始化

时间:2019-01-25 03:45:26

标签: arrays kotlin syntax

我正在尝试在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}};

虽然多余的样板不是世界末日,但很烦人。

2 个答案:

答案 0 :(得分:1)

在Kotlin中,数组没有更短的语法,它不提供集合文字(还可以吗?)。

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

是必经之路。

答案 1 :(得分:1)

另一个答案指出,没有内置的较短语法。您使用arrayOf()&c的示例是常规解决方案。

(在JavaKotlin中有关于集合文字的建议,但它们的名称为highly contentious,因为存在很多可能性:例如,您想要一个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))