/ / Come posso passare da un array all'altro saltando gli elementi precedentemente indicati? - rubino, matrici

Come posso scorrere gli array saltando gli elementi precedentemente indicati? - rubino, matrici

Esiste un modo per passare in rassegna due array e farli fare riferimento a un determinato elemento ogni volta? Per esempio:

first_array = ["a", "b", "c", "d"]
second_array = ["e", "f", "g", "h"]

first_array.each |item| puts item.get(second_array)

I risultati sarebbero simili:

a would work with e
b would work with f
c would work with g
d would work with h

Sto cercando di farlo in modo che quando una variabile da first_array è passato a lavorare con second_array, passa alla variabile successiva in second_array, saltando la variabile precedentemente utilizzata.

risposte:

8 per risposta № 1

Questo è zip.

first_array.zip(second_array){|e1, e2| ...}

2 per risposta № 2

Potresti fare qualcosa del genere:

first_array.each_with_index { |v, i| puts "#{v} can work with #{second_array[i]}" }
# a would work with e
# b would work with f
# c would work with g
# d would work with h

1 per risposta № 3

Supponendo che, come nell'esempio, i due array abbiano le stesse dimensioni, è possibile utilizzare Array # trasposizione:

a1 = %w{a b c d}
#=> ["a", "b", "c", "d"]
a2 = %w{e f g h}
#=> ["e", "f", "g", "h"]
[a1,a2].transpose { |s1,s2| puts "#{s1} and #{s2}" }
#-> a and e
#   b and f
#   c and g
#   d and h

Ogni volta che si lavora con un array a di array di uguali dimensioni (qui [a1,a2]) e desidera operare [a[0][i],a[1][i],..] per ciascuno i, hai sempre la possibilità di utilizzare transpose o Array # zip. In un certo senso lo sono Yin e Yang.

Potresti anche usare solo gli indici:

a1.each_index { |i] puts "#{a1[i]} and #{a2[i]}" }

0 per risposta № 4

dato secondo array è sempre almeno fino a quando il primo

first_array.each_with_index |item,index| do
puts "#{item} would work with #{second_array[index]}"
end