我是 ruby 的新手,正在研究一段代码
scope_value = {"tickets_scope"=>"1", "changes_scope"=>"8", "solutions_scope"=>"15"}
scope_value.values.map { |i| 2** i.to_i }.inject(0, :|)
我明白了
scope_value.values.map {|i| 2** i.to_i }.sum
同样的事情
就功能而言,两行代码做的不是同一件事。在性能方面使用 sum 比其他有什么优势。
最佳答案
In terms of functionality doesn't both lines of code do the same thing.
是的,这两个片段产生相同的结果。
Does inject starting from 0 mean the same as sum
不,一点也不。事实上,0
在这里是无关紧要的。您可以省略它并仍然得到相同的结果。
scope_value.values.map { |i| 2** i.to_i }.inject(:|)
这两个片段中的操作非常不同。由于数据的特殊形状,它们只会产生相同的结果。即“每个数字只有一位集,没有两个数字具有相同的位集”。违反此规则,结果会有所不同。
顺便说一句,在我们有 .sum
之前,我们曾经用 .inject(:+)
来模拟它。 这做同样的事情(当用于整数数组时)
关于ruby - 从0开始注入(inject)和sum一样吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58289340/