>> [1,2,3].zip(["a","b","c"], [:a,:b,:c]) { |x, y, z| p [x, y, z] }
[1, "a", :a]
[2, "b", :b]
[3, "c", :c]
transpose
funziona anche, ma, a differenza di zip
, si crea un nuovo array subito:
>> [[1,2,3], ["a","b","c"], [:a,:b,:c]].transpose.each { |x, y, z| p [x, y, z] }
[1, "a", :a]
[2, "b", :b]
[3, "c", :c]
Note:
Non è necessario each
con zip, ci vuole un blocco.
Anche le espressioni funzionali sono possibili. Ad esempio, utilizzando map
: sums = xs.zip(ys, zs).map { |x, y, z| x + y + z }
.
Per un numero arbitrario di array è possibile eseguire xss[0].zip(*xss[1..-1])
o semplicemente xss.transpose
.
** ESPLODE DI TESTA ** –
Grazie, l'uomo apprezza molto il tuo aiuto. –
+1 Le manipolazioni delle matrici, tramite 'zip',' transpose' o le operazioni di set predefinite, sono strumenti estremamente potenti in Ruby. Puoi crunchare molti dati velocemente con loro. –