2012-10-19 49 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 {...}' –

相關問題