2014-12-16 15 views

Odpowiedz

13

Oto kod źródłowy dla nowych funkcji najwyższego poziomu do tworzenia tablic 2D. Kiedy Kotlin czegoś nie ma, przedłuż go. Następnie dodaj YouTrack issues dla rzeczy, które chcesz zasugerować i śledź status. Chociaż w tym przypadku nie są one znacznie krótsze niż powyżej, to przynajmniej zapewnia bardziej oczywiste nazewnictwo tego, co się dzieje.

public inline fun <reified INNER> array2d(sizeOuter: Int, sizeInner: Int, noinline innerInit: (Int)->INNER): Array<Array<INNER>> 
    = Array(sizeOuter) { Array<INNER>(sizeInner, innerInit) } 
public fun array2dOfInt(sizeOuter: Int, sizeInner: Int): Array<IntArray> 
    = Array(sizeOuter) { IntArray(sizeInner) } 
public fun array2dOfLong(sizeOuter: Int, sizeInner: Int): Array<LongArray> 
    = Array(sizeOuter) { LongArray(sizeInner) } 
public fun array2dOfByte(sizeOuter: Int, sizeInner: Int): Array<ByteArray> 
    = Array(sizeOuter) { ByteArray(sizeInner) } 
public fun array2dOfChar(sizeOuter: Int, sizeInner: Int): Array<CharArray> 
    = Array(sizeOuter) { CharArray(sizeInner) } 
public fun array2dOfBoolean(sizeOuter: Int, sizeInner: Int): Array<BooleanArray> 
    = Array(sizeOuter) { BooleanArray(sizeInner) } 

i użytkowania:

public fun foo() { 
    val someArray = array2d<String?>(100, 10) { null } 
    val intArray = array2dOfInt(100, 200) 
} 
+0

Czy możesz podać linki do dokumentacji? Mogę znaleźć wszelkie odniesienia i wtyczki Idea Kotlin nie rozwiązują go. –

+0

Funkcje i ich kod źródłowy znajdują się w mojej odpowiedzi @ Micheled'Amico ... nie są częścią stdlib. –

+0

Przepraszam, że byłem zbyt leniwy, gdy stuknę w twoją odpowiedź. .... Ale spróbowałem i wersja generyczna nie działa. Nawet szwy są poprawne i powinno zwrócić 'Array (Array )' w czasie wykonywania otrzymam 'java.lang.ClassCastException: [[Ljava.lang.Object; nie można rzutować na [[Something; 'exception]. Ponadto IMHO lepszym podpisem może być 'array2d (sizeOuter: Int, sizeInner: Int, init: (Int, Int) -> INNER)'. Zadaję pytanie, aby zrozumieć, co jest nie tak z twoją definicją funkcji. –

9

Obecnie jest to najprostszy sposób, będziemy przedłużyć standardową bibliotekę z odpowiednimi funkcjami później

+1

dzięki za odpowiedź, więc czekam na M10/RC1/1.0 wydaniu :) – pawegio

+2

Czy mam inne metody zadeklarować dwuwymiarową tablicę Int teraz? –

+4

Teraz jest 1.1.3. Czy to jest aktualne? – thuanle

1

Tak, podany kod jest najprostszym sposobem, aby zadeklarować dwuwymiarową tablicę.

Poniżej podaję przykład inicjalizacji macierzy 2D, drukowanie &.

fun main(args : Array<String>) { 
    var num = 100 

    // Array Initialization 
    var twoDArray = Array(4, {IntArray(3)}) 
    for(i in 0..twoDArray.size - 1) { 
     var rowArray = IntArray(3) 
     for(j in 0..rowArray.size - 1) { 
      rowArray[j] = num++ 
     } 
     twoDArray[i] = rowArray 
    } 

    // Array Value Printing 
    for(row in twoDArray) { 
     for(j in row) { 
      print(j) 
      print(" ") 
     } 
     println("") 
    } 

}