是否存在用於從數組中的所有元素中減去的ruby函數?Ruby從數組中減去一個數字
[2,4,7,8,9] - 8 = [-6,-4,-1,0,1]
這不起作用,但我寧願不要這樣做更復雜的情況下。
[2,4,7,8,9] - [8,8,8,8,8] = [-6,-4,-1,0,1]
是否存在用於從數組中的所有元素中減去的ruby函數?Ruby從數組中減去一個數字
[2,4,7,8,9] - 8 = [-6,-4,-1,0,1]
這不起作用,但我寧願不要這樣做更復雜的情況下。
[2,4,7,8,9] - [8,8,8,8,8] = [-6,-4,-1,0,1]
你想map
,它可以讓你應用轉變爲可枚舉的每個元素,返回結果數組:
[2,4,7,8,9].map { |i| i - 8 } # => [-6, -4, -1, 0, 1]
順便說一句,你的第二個例子最肯定不會不是這樣工作:
[2,4,7,8,9] - [8,8,8,8,8] = [-6,-4,-1,0,1]
減法從第一個數組中刪除第二個數組中的項目,產生[2,4,7,9]
,而不是您的預期[-6,-4,-1,0,1]
。
您可以對第二種情況使用外部迭代器。試試這個:
ary = [8,8,8,8,8].each
[2,4,7,8,9].map{ |e| e - ary.next } # => [-6,-4,-1,0,1]
值得一提的narray
寶石作爲替代使用Ruby的內置Array
和.map
。如果你的數字數組比你的榜樣大得多,那麼narray
進行了優化,做他們的數學,也可以作爲您最初建議:
> require 'narray'
=> true
> a = NArray[10,9,8,2,3]
=> NArray.int(5):
[ 10, 9, 8, 2, 3 ]
> a - 8
=> NArray.int(5):
[ 2, 1, 0, -6, -5 ]
class Array
def to_proc
proc { |receiver| receiver.send *self }
end
end
[2,4,7,8,9].map &[:-, 8] #=> [-6,-4,-1,0,1]
鮑里斯 - 你的意見請:) :) –
@Priti:我認爲你變得比我更好''Benchmark'用戶,但你有標籤轉換:-)))讓我試試在我的機器上。 OMG! –
OMG!我的錯誤...... :) –
您可以使用地圖的任何或採取以下方法收集方法。
[2,4,7,8,9].collect {|e| e-8}
=> [-6, -4, -1, 0, 1]
[2,4,7,8,9].map {|e| e-8}
=> [-6, -4, -1, 0, 1]
如果您使用JRuby,那麼您可以嘗試MDArray,它具有與NArray相似的功能。儘管沒有太多的文檔。
僅當您需要從數組中的每個元素中減去不同的數字時纔有用。 – bronislav