2017-01-21 4 views
2

Mit Groovy möchte ich eine Liste auflisten (mit verschiedenen Größen) transponieren.Groovy Transponieren 2d Array verschiedene Größen

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

erwartete Ergebnis:

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

oder

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

Method .transpose() arbeitet für gleich große arbeitet gut, aber für die nicht gleich - einige Elemente werden abgeschnitten.

Mein Code ist:

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 

Antwort

4

Versuchen

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

Thank you very much :) Groovy - hört nie auf, mich zu überraschen - kurz, stark und arbeiten. Jetzt werde ich versuchen zu verstehen, wie es funktioniert (1) Holen Sie sich das Maximum von mtrx * .size(). Max() (2) iterieren von 0 bis max (3) kombinieren Schließung und Spread-Operator, um jedes Element in der Spalte zu erhalten. – Vanko

Verwandte Themen