ruby inject,循环计算优化
From:http://blog.jayfields.com/2008/03/ruby-inject.html
实体分析
- [1, 2, 3, 4].inject(0) { |result, element| result + element } # => 10
inject带有一个参数和block。block中的两个参数是有含义的。第一个参数reslut在inject第一次执行block时把inject带的参数赋值给它,element就是数组中的元素,该例中inject一共执行4次block(次数更据元素长度定义),每次执行block完后,最后语句的结果再赋值给result,直到遍历数组中所有元素。我们深入这个例子看每一步执行的结果。
因为数组有4个元素,所以要执行4次block操作:
第一次操作:result=0,既等于inject带的参数;element=1,既第一个元素;执行block后result + element =1,再把这个结果付值给result,所以在执行完第一次block后,result = 1。
第二次操作:result=1,既上次运行block后的最后一条语句的结果;element=2,既第二个元素;执行block后付值result=3。
如此类推,直到最后一次执行完block,生产的值为10。就是inject的返回值了。
inject可以不带参数,此时result的初始值为数组元素的第一个值。所以上例可改写成:
- [1, 2, 3, 4].inject{ |result, element| result + element }
这时执行block的次数为3次。
文章中还提到也其它用法:
- hash = [[:first_name, 'Shane'], [:last_name, 'Harvie']].inject({}) do |result, element|
- result[element.first] = element.last
- result
- end
- hash # => {:first_name=>"Shane", :last_name=>"Harvie"}
把array转换成hash表。有也第一个例子的基础,这个例子应该很容易看得懂。
再看一个例子,需要对一数组元素进行过滤并进行一些加工,
- [1, 2, 3, 4, 5, 6].select { |element| element % 2 == 0 }.collect { |element| element.to_s } # => ["2", "4", "6"]
上面代码实现选取数组中的偶数,并把它们转换成字符型。用inject如何实现呢?
- array = [1, 2, 3, 4, 5, 6].inject([]) do |result, element|
- result << element.to_s if element % 2 == 0
- result
- end
- array # => ["2", "4", "6"]
ruby inject,循环计算优化相关推荐
- android 对for循环进行优化
今天,简单讲讲如何对for循环进行优化. 完成同样的功能,用不同的代码来实现,性能上可能会有比较大的差别,所以对于一些性能敏感的模块来说,对代码进行一定的优化还是很有必要. 作为三大结构之一的循环,在 ...
- 性能提升400倍丨外汇掉期估值计算优化案例
在金融领域,合约的估值计算是个常见需求.几百万个合约,由于到期时间和期限长短不同,计算时往往对应不同的利率.合约匹配利率,最常见的做法是通过循环语句对每一个合约做计算.而 DolphinDB 中,可以 ...
- 流式计算优化:时效性 [王方浩视角]
1. 背景-什么是流计算 在传统的数据处理流程中,总是先收集数据,然后将数据放到数据库中,当人们需要的时候通过查询对应的数据进行处理.这样看起来没什么大问题,但是当我们遇到以下场景的时候就有问题了.比 ...
- 使用循环计算斐波那契数列
1 /* 2 * 使用循环计算斐波那契数列的前 20 项,已经前 20 项的和. 3 提示:斐波那契数列:1,1,2,3,5,8,13,21- 4 从第三项开始,每一项为前面两项的和 5 6 */ 7 ...
- SQL 难点解决:循环计算
SQL 虽然可以对集合中的记录进行循环计算, 但在循环计算过程中利用中间变量.同时计算多个值.前后记录访问.减少循环次数等方面差强人意.而集算器 SPL 则要直观许多,可以按自然思维习惯写出运算.这里 ...
- ANSYS CFX 脚本详细设置,实现循环计算
ANSYS CFX 脚本详细设置,实现循环计算 参考链接: https://www.zhihu.com/question/29498222
- 美图技术博客之地理空间距离计算优化
http://tech.meituan.com/lucene-distance.html 地理空间距离计算优化 zhan2014-09-05 18:35 1 地理空间距离计算面临的挑战 打开美团app ...
- python用for循环求和1到100_python使用for循环计算0-100的整数的和方法
python使用for循环计算0-100的整数的和方法 更新时间:2019年02月01日 09:23:07 作者:Lucifer-L 今天小编就为大家分享一篇python使用for循环计算0-100的 ...
- R语言while循环计算圆周率
R语言while循环计算圆周率 原理说明 计算圆周率的方法很多,在这里我们使用概率的方法来计算圆周率(蒙特卡洛法). 假设有一个正方形,以其一个顶点为圆心,正方形的边长为半径,画1/4圆.则可以在正方 ...
最新文章
- 用IKVMC将jar转成dll供c#调用
- 【Splay】洛谷3372 【模板】线段树 1
- modelsim(1):经常使用的测试设计的结构
- 考拉海购全面云原生迁移之路
- 休宁天气预报软件测试,【休宁天气预报】休宁今天天气预报 - 天气史
- 全文索引的使用(二)--使用同义词库
- Wireshark详细使用教程
- SQL语句设置标识种子
- DOS编写脚本常用命令整理
- 【二】[详细]针孔相机模型、相机镜头畸变模型、相机标定与OpenCV实现
- 测试分类 test catagory
- rdesktop远程使用Windows的一些技巧
- Array.of()
- 眼球追踪如何预测头部追踪
- 地球上20张最惊人的照片_地球上30个惊人的自然景点
- 载体坐标系-惯性坐标系-世界坐标系
- Comet OJ - Contest #8 神奇函数(积性函数)
- Win10怎么设置窗口护眼色
- android怎么监听当前应用被卸载
- IIS三种应用程序池回收方法(保姆级教程)
热门文章
- ios与android设计适配,IOS与Android UI适配方案
- 模型部署到移动端_分分钟打开倾斜摄影模型,新版本的老子云移动端也太好用了吧!...
- 相同点安卓和iosui的相同点_iOS 8和安卓L详尽界面对比 风格有些相似?
- 苹果在线签名服务器搭建,苹果超级签名系统搭建
- android 实现微博分享,分享到微信微博QQ的简单实现(二)
- 斐波那契数列简单步骤分析
- 谈顺丰与菜鸟的数据断交事件
- 作为管理者如何提高员工工作效率?
- Invalid revision: 3.18.1-g262b901
- 2018年上安徽c语言试卷答案,安徽省2018年中考物理试题(含答案).doc