我正在尝试在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}};
虽然多余的样板不是世界末日,但很烦人。
答案 0 :(得分:1)
在Kotlin中,数组没有更短的语法,它不提供集合文字(还可以吗?)。
val arr = arrayOf(
intArrayOf(1,8,12,20,25),
intArrayOf(5,9,13,24,26)
)
是必经之路。
答案 1 :(得分:1)
另一个答案指出,没有内置的较短语法。您使用arrayOf()
&c的示例是常规解决方案。
(在Java和Kotlin中有关于集合文字的建议,但它们的名称为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))