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 № 1Questo è 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