2014-12-16 21 views

risposta

13

Ecco il codice sorgente per le nuove funzioni di primo livello per creare matrici 2D. Quando a Kotlin manca qualcosa, estendilo. Quindi aggiungi YouTrack issues per le cose che desideri suggerire e traccia lo stato. Anche se in questo caso non sono molto più brevi di quanto sopra, almeno fornisce una denominazione più ovvia per ciò che sta accadendo.

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) } 

e di utilizzo:

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

Puoi fornire alcuni collegamenti alla documentazione? Posso trovare qualsiasi riferimento e il plug in kotlin di Idea non risolve il problema. –

+0

Le funzioni e il loro codice sorgente sono nella mia risposta @ Micheled'Amico ... non fanno parte dello stdlib. –

+0

Scusa se ero troppo pigro quando ho la canna della tua risposta. .... Ma l'ho provato e la versione generica non funziona. Anche se corretto, dovrebbe restituire un 'Array (Array )' in fase di esecuzione ricevo 'java.lang.ClassCastException: [[Ljava.lang.Object; non può essere lanciato su [[Something; 'exception. Inoltre IMHO una firma migliore può essere 'array2d (sizeOuter: Int, sizeInner: Int, init: (Int, Int) -> INNER)'. Presenterò una domanda per capire cosa c'è che non va nella definizione della tua funzione. –

9

Attualmente questo è il modo più semplice, estenderemo la libreria standard con le funzioni appropriate in seguito

+1

grazie per la risposta, quindi sto aspettando M10/RC1/release 1.0 :) – pawegio

+2

Devo altri metodi per dichiarare matrice bidimensionale Int Ora? –

+4

È 1.1.3 ora. È aggiornato? – thuanle

1

Sì, il codice data è il modo più semplice per dichiarare un array bidimensionale.

Di seguito, vi sto dando un esempio di inizializzazione di array 2D &.

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("") 
    } 

}