ruby - 从0开始注入(inject)和sum一样吗

标签 ruby performance ruby-2.3

我是 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/

相关文章:

ruby - 如何在哈希数组中找到由多个键分组的最大值?

ruby - 尝试在 ruby​​ 中搜索字符串以获取输入

mysql - 在 Mac 上安装 MySQL2 gem 失败

mysql - MySQL Select 查询执行缓慢

c# - 从控制台程序记录到 txt 文件的有效方法

ruby-on-rails - 升级到 OS Sierra 后 Rails 出现段错误,可能与 sqlite3 gem 有关

ruby - block 中定义的方法属于哪个类?

ruby - 我如何使用 (Ruby) RGeo 转换 (Unproject) 坐标

ruby - 在 Ruby 矩阵中交换列或行

c# - 使用 : Convert. ToX 或 X.Parse(...) 哪个更好?