如何在kotlin中初始化一个二维不可空字符串数组
How in kotlin to initialize a two dimensional non-nullable string array
有两个痴呆的字符串数组,并且该行只有两个项目,
i.e. {{"1", "a"} {"2", "b"}, {"3", "c"} ... ...}
进行反转的反转函数
public static String[][] invert(final String[][] array) {
final String[][] newarray = new String[array.length][2];
for(int i = 0; i<array.length; i++) {
newarray[i][0] = array[i][1];
newarray[i][1] = array[i][0];
}
return newarray;
}
翻译成科特林:
fun invert(array: Array<Array<String?>>): Array<Array<String?>> {
val newarray = Array<Array<String?>>(array.size) { arrayOfNulls(2) }
for (i in array.indices) {
newarray[i][0] = array[i][1]
newarray[i][1] = array[i][0]
}
return newarray
}
因为arrayOfNulls(2)
,不得不定义两个痴呆数组为Array<Array<String?>>
但是 Array<Array<String?>>
的 return 类型破坏了很多期望 Array<Array<String>>
的代码
使用val newarray = Array<Array<String>>(array.size) { Array<String>(2) {""}}
强制数组初始化所有行为空字符串(因此不为空)。
fun invert(array: Array<Array<String>>): Array<Array<String>> {
val newarray = Array<Array<String>>(array.size) { Array<String>(2) {""}}
for (i in array.indices) {
newarray[i][0] = array[i][1]
newarray[i][1] = array[i][0]
}
return newarray
}
这是唯一的方法吗,还是有像
这样的功能
fun strinagArrayOf(vararg elements: String): Array<String>
那个翻译让你偏离了轨道;没有理由初始化并再次遍历字段。
这是您正在使用的构造函数的签名:
/**
* Creates a new array with the specified [size], where each element is calculated by calling the specified
* [init] function. The [init] function returns an array element given its index.
*/
public inline constructor(size: Int, init: (Int) -> T)
您实际上可以为 init
函数中的每个项目传递您自己的初始化逻辑。您甚至可以获得正在初始化的项目的索引(这是唯一的参数,因此未明确声明但可以访问 it
)。
所以为了得到你需要的东西,你可以在那里简单地初始化倒排数组(为了便于阅读,将参数从 array
更改为 input
):
fun invert(input: Array<Array<String>>) = Array(input.size) {arrayOf(input[it][1], input[it][0]) }
有两个痴呆的字符串数组,并且该行只有两个项目,
i.e. {{"1", "a"} {"2", "b"}, {"3", "c"} ... ...}
进行反转的反转函数
public static String[][] invert(final String[][] array) {
final String[][] newarray = new String[array.length][2];
for(int i = 0; i<array.length; i++) {
newarray[i][0] = array[i][1];
newarray[i][1] = array[i][0];
}
return newarray;
}
翻译成科特林:
fun invert(array: Array<Array<String?>>): Array<Array<String?>> { val newarray = Array<Array<String?>>(array.size) { arrayOfNulls(2) } for (i in array.indices) { newarray[i][0] = array[i][1] newarray[i][1] = array[i][0] } return newarray }
因为arrayOfNulls(2)
,不得不定义两个痴呆数组为Array<Array<String?>>
但是 Array<Array<String?>>
的 return 类型破坏了很多期望 Array<Array<String>>
使用
val newarray = Array<Array<String>>(array.size) { Array<String>(2) {""}}
强制数组初始化所有行为空字符串(因此不为空)。fun invert(array: Array<Array<String>>): Array<Array<String>> { val newarray = Array<Array<String>>(array.size) { Array<String>(2) {""}} for (i in array.indices) { newarray[i][0] = array[i][1] newarray[i][1] = array[i][0] } return newarray }
这是唯一的方法吗,还是有像
这样的功能fun strinagArrayOf(vararg elements: String): Array<String>
那个翻译让你偏离了轨道;没有理由初始化并再次遍历字段。
这是您正在使用的构造函数的签名:
/**
* Creates a new array with the specified [size], where each element is calculated by calling the specified
* [init] function. The [init] function returns an array element given its index.
*/
public inline constructor(size: Int, init: (Int) -> T)
您实际上可以为 init
函数中的每个项目传递您自己的初始化逻辑。您甚至可以获得正在初始化的项目的索引(这是唯一的参数,因此未明确声明但可以访问 it
)。
所以为了得到你需要的东西,你可以在那里简单地初始化倒排数组(为了便于阅读,将参数从 array
更改为 input
):
fun invert(input: Array<Array<String>>) = Array(input.size) {arrayOf(input[it][1], input[it][0]) }