按顺序将两个ruby数组映射在一起

时间:2017-02-16 20:40:32

标签: arrays ruby math

我有这两个数组:

array1 = [1,2,3,4,5]
array2 = ['aaa','bbb','ccc']

我在第一个数组上进行迭代:

array1.each do |item|
  puts "#{item} = #{<what I can't figure out>}"... 
end

我希望能够将array2的值顺序分配给循环中array1的值,以便块的结果为:

1 = 'aaa'
2 = 'bbb'
3 = 'ccc'
4 = 'aaa'
5 = 'bbb'

依此类推,以便第二个数组按顺序循环到第一个数组中的项目。

我没有那么好的数学,但似乎会有一个功能可以做到这一点。

5 个答案:

答案 0 :(得分:5)

试试这个

array1 = [1,2,3,4,5]
array2 = ['aaa','bbb','ccc'].cycle

array1.each do |item|
  puts "#{item} = #{array2.next}"
end

答案 1 :(得分:1)

我更喜欢@Ursus&#39;使用Array#cycle,但您也可以写下以下内容。

arr1 = [1,2,3,4,5]
arr2 = ['aaa','bbb','ccc']

arr1.each_with_index { |item,i| puts "%i = %s" % [item, arr2[i % arr2.size]] }
1 = aaa
2 = bbb
3 = ccc
4 = aaa
5 = bbb

答案 2 :(得分:1)

zip在这里很有用:

array1 = [1,2,3,4,5]
array2 = ['aaa','bbb','ccc']

puts array1.zip(array2.cycle).map { |n,s| "#{n} = #{s}" }
#1 = aaa
#2 = bbb
#3 = ccc
#4 = aaa
#5 = bbb
#=> nil

答案 3 :(得分:0)

如果它们的大小相同:

array1.size.times do |i|
  puts "#{array1[i]} = #{array2[i]}"
end

易于阅读,可以延伸至array3,依此类推

答案 4 :(得分:0)

使用模运算符:

array1 = [1,2,3,4,5]
array2 = ['aaa','bbb','ccc']

for i in (0..(array1.count-1))
  puts "#{array1[i]} = #{array2[i % array2.count]}"
end