[英]Is there an idiomatic way to operate on 2 arrays in Ruby?
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|
太丑了......
Ruby 1.9.3
使用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程序员,所以我为任何我已经践踏过的习语道歉。
出于性能原因, zip
可能更好,但transpose
保持对称性并且更容易理解。
[a, b].transpose.map{|a, b| a * b}
# => [15, 12, 42, 64, 9]
zip
和transpose
之间的区别在于,如果数组的长度不同,前者将nil
作为默认值插入,而后者则引发错误。 根据具体情况,你可能会偏爱另一个。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.