Having a two demential string array and the row has only two items,
i.e. {{"1", "a"} {"2", "b"}, {"3", "c"} ... ...}
the invert function to do the invert
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;
}
translate to 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 }
Because of the arrayOfNulls(2)
, has to define the two demential array to be Array<Array<String?>>
but the return type of Array<Array<String?>>
breaks the a lot of the code which expecting Array<Array<String>>
Using the
val newarray = Array<Array<String>>(array.size) { Array<String>(2) {""}}
to force the array initialized all rows with empty string (so not 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 }
Is it the only way, or is there some function like
fun strinagArrayOf(vararg elements: String): Array<String>