2017-01-21 41 views
2

隨着groovy我想在列表(不同大小)列表轉置。groovy轉置二維數組不同的大小

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)從max迭代到max(3)結合閉包和展開運算符來獲取列中的每個元素。 – Vanko