arrays - 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}};
虽然额外的样板文件不是世界末日,但它很烦人。
解决方案
正如另一个答案指出的那样,没有内置的更短的语法。您的arrayOf()
&c 示例是常规解决方案。
(在Java和Kotlin中有关于集合字面量的提议,但它们非常 有争议,因为有很多可能性:例如,你想要一个 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))
推荐阅读
- javascript - 如何将按钮添加到嵌入页面 discord.js
- scilab - 如何用另一种语言编程 contr() scilab 函数
- go - 如何在 Golang 中将 keyUsage 添加到证书签名请求中
- javascript - 我想从用户输入的数字和生成的数字中找到匹配的数字并突出显示匹配项
- javascript - 如何禁用今天的日期和日期选择器默认是第二天
- php - 我在这段代码中的 for 循环上限为 10 任何想法为什么会这样?
- laravel - 如何解决 laravel 单元测试中对未定义方法 assertSessionHasErrors 的错误调用?
- python-3.x - 基于相同颜色的像素绘制多边形(矢量化)栅格——得到坏多边形
- .net - Azure B2C 返回错误持有者 error="invalid_token", error_description="签名无效
- c++ - CM_Request_Device_Eject 因 PNP_VetoIllegalDeviceRequest 而失败