2013-06-12 2 views

risposta

28
>> [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.

+3

** ESPLODE DI TESTA ** –

+0

Grazie, l'uomo apprezza molto il tuo aiuto. –

+0

+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. –