5
a = [3, 4, 7, 8, 3]
b = [5, 3, 6, 8, 3]

假设数组长度相同,有没有办法使用each或其他惯用方式从两个数组的每个元素中获取结果?不使用计数器?

例如,要获取每个元素的乘积:[15, 12, 42, 64, 9]

(0..a.count - 1).each do |i|太丑了……

红宝石 1.9.3

4

2 回答 2

6

如何使用Array.zip

>> a = [3,4,7,8,3]
=> [3, 4, 7, 8, 3]
>> b = [5,3,6,8,3]
=> [5, 3, 6, 8, 3]
>> c = []
=> []
>> a.zip(b) do |i, j| c << i * j end
=> [[3, 5], [4, 3], [7, 6], [8, 8], [3, 3]]
>> c
=> [15, 12, 42, 64, 9]

注意:我不是一个 Ruby 程序员,所以对于我践踏的任何成语,我深表歉意。

于 2012-10-19T02:17:00.893 回答
4

出于性能原因,zip可能会更好,但transpose保持对称且更易于理解。

[a, b].transpose.map{|a, b| a * b}
# => [15, 12, 42, 64, 9]

zip和之间的区别在于transpose,如果数组的长度不同,则前者nil默认插入,而后者会引发错误。根据情况,您可能会偏爱其中一个。

于 2012-10-19T04:06:50.070 回答