同时迭代两个集合

时间:2014-11-21 18:29:32

标签: ruby loops

a = [1,2,3]
b = [4,5  ]

我想要的是同时迭代这两个集合并使用迭代器做一些事情,伪代码就像:

for i in a
for j in b
collect i * j

当一个集合用完元素时,循环停止。

结果将为[4, 10]

我拥有的是:

a = [1,2,3]
b = [4,5  ]

a.zip(b).reject { |c| c.any? { |d| d.nil? } }.map { |e| e.reduce(&:*) }

有更好的解决方案吗?谢谢!

我正在寻找的完美解决方案是匹配伪代码的意图。

2 个答案:

答案 0 :(得分:2)

你可以这样做:

a, b = b, a if b.length < a.length

a.zip(b).map { |ia, ib| ia * ib }
# => [4, 10]

第一行确保数组a最多具有与数组b相同数量的元素。这是因为zip创建了一个由被调用数组长度组成的数组。将a作为最短数组可确保不存在nil s。

答案 1 :(得分:1)

这是另一种方法:

[a.length, b.length].min.times.map {|i| a[i]*b[i] }

我们的想法是你使用两个数组长度[a.length, b.length].min中较短的一个,然后在整数i上迭代多次,用作数组的索引。< / p>