具有两个痴呆的字符串数组,并且该行只有两项,
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;
}
翻译成Kotlin:
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?>>
破坏了很多期望Array<Array<String>>
的代码
使用val newarray = Array<Array<String>>(array.size) { Array<String>(2) {""}}
强制数组用空字符串初始化所有行(因此不能为null)。
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>
答案 0 :(得分:3)
那种翻译使你偏离了轨道;没有理由初始化并再次遍历这些字段。
这是您使用的构造函数的签名:
/**
* 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]) }