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
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
出於性能原因,zip
可能會更好,但transpose
保持對稱性,並更容易理解。
[a, b].transpose.map{|a, b| a * b}
# => [15, 12, 42, 64, 9]
zip
和transpose
之間的差別在於,在情況下,陣列不具有相同的長度,前插入物nil
作爲默認而後者引發錯誤。根據具體情況,你可能會偏好另一個。
關於使用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對任何我曾經踐踏過的成語都會有所感觸。
正要寫它。這就是我會這麼做的方式:) – Castilho
@Castilho:我的第一個想法是,該死的...... Ruby必須有一個「zip」方法。我來自Python地區,所以花了幾秒鐘才找到它。 –
大括號通常與單線使用('a.zip(b).each {| i,j | c << i * j}'),但這不完全是*踐踏*。在這個特殊情況下'map'會更合適:'c = a.zip(b).map {...}' –