ruby - 从 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 是否有任何优势。
解决方案
就功能而言,两行代码都不会做同样的事情。
是的,这两个片段产生相同的结果。
从 0 开始注入是否与总和相同
一点都不。其实0
这里是无关紧要的。你可以省略它,仍然得到相同的结果。
scope_value.values.map { |i| 2** i.to_i }.inject(:|)
这两个片段中的操作非常不同。由于数据的特殊形状,它们只会产生相同的结果。这是“每个数字只有一个位设置,没有两个数字具有相同的位设置”。违反这条规则,结果就会出现分歧。
顺便说一句,在我们有之前.sum
,我们曾经用.inject(:+)
. 这做同样的事情(当用于整数数组时)
推荐阅读
- python - 出现错误:-“TypeError: no numeric data to plot”即使完全按照教程进行
- amazon-web-services - 调用 sts:AssumeRole 时 AWS AccessDenied
- spring - 尝试使用 spring 服务器和云访问 .properties 文件。适用于本地仓库但不适用于 git 远程仓库
- heroku - Discord.js 机器人 | Heroku 部署错误 | npm 错误!缺少脚本:开始
- scala - 理解 Scala 隐式类
- git - git:在发布/标签中获取*新*贡献者(作者)列表
- python - 如何正确地在本地“部署”基于 Python 的服务器应用程序进行开发?
- jquery - 我的标题图像隐藏在固定顶部导航栏后面
- android - 如何正确实现 View.OnClickListener 并将其与 TextView 一起使用?
- angular - openLayers addFeature 从 xmlhttprequest 角度的向量源