2016-10-31 1 views
6

Die folgende Array enthält zwei Arrays mit jeweils 5 ganzzahlige Werte:Kombinieren Arrays in Ruby

[[1,2,3,4,5],[6,7,8,9,10]] 

I diese so kombinieren möchte, dass es durch die Kombination von Werten der beiden Arrays bei Index fünf verschiedenen Arrays erzeugt 0 1 .. bis 4.

sollte die Ausgabe wie folgt sein:

[[1,6],[2,7],[3,8],[4,9],[5,10]] 

gibt es eine einfachste Weg, dies zu tun?

Antwort

9

Was ist mit transpose Methode?

a = [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]] 
#=> [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]] 

a.transpose 
#=> [[1, 6], [2, 7], [3, 8], [4, 9], [5, 10]] 

diese Methode können Sie auch in Zukunft, wie beispielsweise helfen:

a = [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15]] 
#=> [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15]] 

a.transpose 
#=> [[1, 6, 11], [2, 7, 12], [3, 8, 13], [4, 9, 14], [5, 10, 15]] 
+0

Ja, es funktioniert und wird auch in Zukunft helfen. – Arif

5
a = [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]] 
a.first.zip(a.last) 
2

Wenn Sie Ihre Subarrays die gleiche Länge sind sicher, können Sie Array#transpose verwenden:

[[1,2,3,4,5],[6,7,8,9,10]].transpose 
#=> [[1, 6], [2, 7], [3, 8], [4, 9], [5, 10]] 

Als Bonus funktioniert es gut mit mehr als 2 Arrays:

[[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]].transpose 
#=> [[1, 6, 11], [2, 7, 12], [3, 8, 13], [4, 9, 14], [5, 10, 15]] 

Wenn Sie sich nicht sicher, ob Ihre Subarrays die gleiche Länge haben:

[[1,2,3,4,5],[6,7,8,9], [10,11]].reduce(&:zip).map(&:flatten) 
#=> [[1, 6, 10], [2, 7, 11], [3, 8, nil], [4, 9, nil], [5, nil, nil]] 

in diesem Beispiel verwenden umsetzen würde einen Indexerror werfen.

1

Verwendung von paralleler Zuordnung:

a, b = [[1, 2, 3, 4, 5],[6, 7, 8, 9, 10]] 
a.zip b #=> [[1, 6], [2, 7], [3, 8], [4, 9], [5, 10]]