所以我在Ruby 2.4.0中运行了一些基准并意识到了这一点
(1...1000000000000000000000000000000).sum
Run Code Online (Sandbox Code Playgroud)
立即计算,而
(1...1000000000000000000000000000000).inject(:+)
Run Code Online (Sandbox Code Playgroud)
需要很长时间,我只是中止了操作.我的印象Range#sum是别名,Range#inject(:+)但似乎不是这样.那怎么sum工作,为什么它比这快得多inject(:+)?
NBEnumerable#sum(由其实现Range)的文档没有说明延迟评估或其他任何内容.
我0.0 24.0 0.0 12.0 0.0 0.0 0.0 0.0 0.0怎么得到这些值的总和?.sum等不适用于花车
编辑:
我正在做
<% @data.each do |data| %>
<%= data[ :values ]%>
<%end%>
Run Code Online (Sandbox Code Playgroud)
当data[:values]打印
[5.0, 0.0, 0.0, 0.0, 0.0]
[4.0, 0.0, 0.0, 0.0, 0.0]
[1.0, 0.0, 0.0, 0.0, 0.0]
,我只希望得到每个数组的第一个值和它们一起求和得到10.0
@data打印
[{:name=>"BMW", :values=>[0.0, 0.0, 0.0, 0.0, 0.0]}, {:name=>"Asda", :values=>[32.0, 12.0, 0.0, 0.0, 0.0]}]
Run Code Online (Sandbox Code Playgroud) 问:写一个方法,sum取一个数字数组并返回数字的总和.
A:
def sum(nums)
total = 0
i = 0
while i < nums.count
total += nums[i]
i += 1
end
# return total
total
end
Run Code Online (Sandbox Code Playgroud)
没有使用的时候必须有另一种方法来解决这个问题吧?谁知道怎么样?
编辑:这不是考试或考试.这是应用学院的github上提供的练习题.他们以问题和答案为例.我只是读过那些优秀的程序员不喜欢使用的时候或者除非,所以我很好奇我是否可以学习一些东西以更好的方式解决这个问题.跟可数一样吗?(这里Ruby的Noob显然......)
此外,我会喜欢任何我应该学习的演练或方法.这个问题也不同,因为我要求使用这些数据的具体例子.
为什么会[].sum给出未定义的方法错误?
[5, 15, 10].sum
# => NoMethodError: undefined method `sum' for [5, 15, 10]:Array
Run Code Online (Sandbox Code Playgroud)
做ri Array#sum退货:
Run Code Online (Sandbox Code Playgroud)Array#sum (from gem activesupport-4.2.6) Implementation from Enumerable ------------------------------------------------------------------------------ sum(identity = 0, &block) ------------------------------------------------------------------------------ Calculates a sum from the elements. payments.sum { |p| p.price * p.tax_rate } payments.sum(&:price) The latter is a shortcut for: payments.inject(0) { |sum, p| sum + p.price } It can also calculate the sum without the use of a block. [5, 15, 10].sum # => 30 ## …
这是一个简单的问题......
这种方法可以重构吗?
def sum
total = 0
[1,2,3,4].each do |num|
total += num
end
total
end
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助!