2014-12-16 25 views

cevap

13

2D diziler oluşturmak için yeni üst düzey fonksiyonları için kaynak kodu olan uygun işlevleriyle standart kütüphane uzatacaktır. Kotlin bir şey eksikken uzatın. Sonra önermek ve durumu izlemek istediğiniz şeyler için YouTrack issues'u ekleyin. Bu durumda, yukarıdakilerden çok daha kısa olmalarına rağmen, en azından neler olup bittiğine dair daha belirgin bir isimlendirme sağlar.

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

Ve kullanımı:

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

Bazı belgelerin bağlantılarını verebilir misiniz? Dikişlerde herhangi bir referans ve Fikir kotlin fişi bulabilirim. –

+0

Fonksiyonlar ve kaynak kodları benim Micheled'Amico cevabımda… stdlib'in bir parçası değiller. –

+0

Maalesef cevabını özlediğimde çok tembel davrandım. .... Ama denedim ve genel sürümü çalışmıyor. Hatta doğru şekilde dikiş yapar ve 'java.lang.ClassCastException 'ı aldığım çalışma zamanında bir Array (Array )' i döndürmesi gerekir. [[Ljava.lang.Object; [[Bir şey; 'istisna. Ayrıca IMHO daha iyi bir imza olabilir 'array2d (sizeOuter: Int, sizeInner: Int, init: (Int, Int) -> INNER)'. İşlev tanımınızda neyin yanlış olduğunu anlamak için bir soru soracağım. –

9

Şu anda bu kolay yoludur, biz daha sonra burada

+1

teşekkürler cevap için, bu yüzden M10/RC1/1.0 sürümü bekliyorum :) – pawegio

+2

Ben Şimdi iki boyutlu Int diziyi bildirmek için başka yöntemler var mı? –

+4

Artık 1.1.3 var. Bu güncel mi? – thuanle

1

Evet, verilen kod iki boyutlu diziyi bildirmek için en kolay yoludur.

Aşağıda, size 2B dizi başlatma & yazdırma örneği vereceğim.

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

}