首页 > 解决方案 > 从 0 开始注入是否与总和相同

问题描述

我是 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 是否有任何优势。

标签: rubyperformanceruby-2.3

解决方案


就功能而言,两行代码都不会做同样的事情。

是的,这两个片段产生相同的结果。

从 0 开始注入是否与总和相同

一点都不。其实0这里是无关紧要的。你可以省略它,仍然得到相同的结果。

scope_value.values.map { |i| 2** i.to_i }.inject(:|)

这两个片段中的操作非常不同。由于数据的特殊形状,它们只会产生相同的结果。这是“每个数字只有一个位设置,没有两个数字具有相同的位设置”。违反这条规则,结果就会出现分歧。


顺便说一句,在我们有之前.sum,我们曾经用.inject(:+). 做同样的事情(当用于整数数组时)


推荐阅读