2017-01-21 34 views
2

groovyで並べ替える(サイズの違う)リストのリストを作りたい。groovy 2次元配列の異なるサイズを

def mtrx = [ 
    [1,2,3], 
    [4,5,6,7] 
] 

期待される結果:

[[1,4],[2,5],[3,6],[null,7]] 

又は

[[1,4],[2,5],[3,6],[7]] 

方法.transposeは()が、等しくないため、サイズの等しいが正常に動作しているために働いている - いくつかの要素が遮断されています。

私のコードは次のとおりです。

def max = 0 
def map = [:] 
def mapFinal = [:] 
def row = 0 

def mtrx = [ 
    [1,2,3], 
    [4,5,6,7] 
] 

mtrx.each{it-> 
    println it.size() 
    if(max < it.size()){ 
     max = it.size() 
    } 
} 
def transposed = mtrx.each{it-> 
    println it 
    it.eachWithIndex{it1, index-> 
     println it1 + ' row ' + row + ' column ' +index 
     mapFinal[row+''+index] = it1 
     map[index+''+row] = it1 
    } 
    row++ 
} 
println map 
println mapFinal 

答えて

4

(0..<(mtrx*.size().max())).collect { 
    mtrx*.getAt(it) 
} 
+0

を試してみて本当にありがとうございます:)のGroovyを - 、短いGroovyと作業 - 私を驚かせたことがありません。ここでは、どのように動作するかを理解しようとします。(1)mtrx * .size()によって最大値を取得します。max()(2)0からmaxまでを繰り返します。 – Vanko