2012-10-19 23 views
5
a = [3, 4, 7, 8, 3] 
b = [5, 3, 6, 8, 3] 

假设数组长度相同,有没有办法使用each或其他一些惯用的方法从两个数组的每个元素中获取结果?没有使用柜台?在Ruby中有两种操作数组的方法吗?

例如,要获得每个元素的产品:[15, 12, 42, 64, 9]

(0..a.count - 1).each do |i|是如此丑陋...

的Ruby 1.9.3

回答

4

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

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

ziptranspose之间的差别在于,在情况下,阵列不具有相同的长度,前插入物nil作为默认而后者引发错误。根据具体情况,你可能会偏好另一个。

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程序员,所以我apolo对任何我曾经践踏过的成语都会有所感触。

+0

正要写它。这就是我会这么做的方式:) – Castilho

+0

@Castilho:我的第一个想法是,该死的...... Ruby必须有一个“zip”方法。我来自Python地区,所以花了几秒钟才找到它。 –

+4

大括号通常与单线使用('a.zip(b).each {| i,j | c << i * j}'),但这不完全是*践踏*。在这个特殊情况下'map'会更合适:'c = a.zip(b).map {...}' –

相关问题