2014-12-16 7 views

답변

13

2 차원 배열을 만들 수있는 새로운 최상위 기능에 대한 소스 코드입니다 적절한 기능을 표준 라이브러리를 확장합니다. Kotlin이 뭔가를 잃어 버렸을 때 그것을 확장하십시오. 그런 다음 제안하고 상태를 추적하려는 것에 대해 YouTrack issues을 추가하십시오. 이 경우에는 위의 내용보다 훨씬 짧지는 않지만 적어도 어떤 일이 일어나는지에 대해보다 명확한 이름을 제공합니다.

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

그리고 사용 :

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

문서 링크를 줄 수 있습니까? 나는 어떤 참고 문헌이나 솔기의 아이디어 코 틀린 플러그가 그것을 해결하지 못하는 것을 발견 할 수 있습니다. –

+0

함수와 그 소스 코드는 내 대답 @ Micheled'Amico에 있습니다 ... 그들은 stdlib의 일부가 아닙니다. –

+0

죄송합니다. 나는 당신의 대답을 이끌어 낼 때 너무 게으른 분이었습니다. ....하지만 그것을 시도하고 제네릭 버전이 작동하지 않습니다. 이음새도 정확하고 런타임에'Array (Array )'를 반환해야합니다. java.lang.ClassCastException : [[Ljava.lang.Object; [[Something;] 예외로 캐스팅 될 수 없습니다. 또한 IMHO는 더 나은 시그니처는'array2d (sizeOuter : int, sizeInner : Int, init : (Int, Int) -> INNER)'일 수 있습니다. 나는 당신의 함수 정의가 잘못된 것을 이해하기 위해 질문을 제기 할 것이다. –

9

는 현재이 가장 쉬운 방법입니다, 우리는 나중에 여기

+1

덕분에 대답을, 그래서 M10/RC1/1.0 릴리스 기다리고 있어요 :) – pawegio

+2

내가 지금 두 차원 int 배열을 선언하는 다른 방법이 있습니까? –

+4

이제 1.1.3입니다. 최신 버전입니까? – thuanle

1

은 예, 주어진 코드는 2 차원 배열을 선언 할 수있는 가장 쉬운 방법입니다.

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

}