是否存在用于从数组中的所有元素中减去的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