2011-04-10 93 views
6

我這樣做:Ruby-添加/減去一個數組元素與另一個數組

a = [1,2,3,4] 
b = [2,3,4,5] 
c = b - a 
put c 

我得到這個答案 - >[1]
我想這個答案 - >[1,1,1,1](如矩陣加法/減法)

我嘗試這樣做:

c.each {|e| c[e] = b[e] - a[e]} 

,但我得到這樣的回答:[1,0,0,0]

有人可以給我一個正確的方法來做到這一點嗎?非常感謝!

回答

16

你可以使用zip

a.zip(b).map { |x, y| y - x } 
# => [1, 1, 1, 1] 

還有一類Matrix

require "matrix" 

a = Matrix[[1, 2, 3, 4]] 
b = Matrix[[2, 3, 4, 5]] 
c = b - a 
# => Matrix[[1, 1, 1, 1]] 
+0

非常感謝。我把所有東西都轉換成矩陣。還有一個問題。我會用什麼來自動構建並填充矩陣?我用array1 = Array.new(hi){| e | e = 0}構造並用0填充用戶定義的數組。是否有類似的矩陣命令?再次感謝! – subyman 2011-04-10 04:17:21

+0

@subyman'array1 = Array.new(hi,0)'會更簡單。 – sawa 2011-04-10 04:20:58

+0

@subyman'Matrix.build'可能就是你要找的東西。檢查[doc for mor info](http://www.ruby-doc.org/stdlib/libdoc/matrix/rdoc/classes/Matrix.html#M001112)。但有很多方法。 – Andy 2011-04-10 04:23:47

2

您可以使用each_with_indexmap

c = b.each_with_index.map { |n,i| n - a[i] } 
# => [1, 1, 1, 1] 
+0

這也適用於Ruby 1.8。 – 2011-04-10 04:11:11

+0

謝謝,我一直忘記1.9中加入了什麼。 – Andy 2011-04-10 04:13:47

相關問題