ruby inject,循环计算优化
From:http://blog.jayfields.com/2008/03/ruby-inject.html
实体分析
![](http://biyeah.iteye.com/images/icon_star.png)
- [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的初始值为数组元素的第一个值。所以上例可改写成:
![](http://biyeah.iteye.com/images/icon_star.png)
- [1, 2, 3, 4].inject{ |result, element| result + element }
这时执行block的次数为3次。
文章中还提到也其它用法:
![](http://biyeah.iteye.com/images/icon_star.png)
- 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表。有也第一个例子的基础,这个例子应该很容易看得懂。
再看一个例子,需要对一数组元素进行过滤并进行一些加工,
![](http://biyeah.iteye.com/images/icon_star.png)
- [1, 2, 3, 4, 5, 6].select { |element| element % 2 == 0 }.collect { |element| element.to_s } # => ["2", "4", "6"]
上面代码实现选取数组中的偶数,并把它们转换成字符型。用inject如何实现呢?
![](http://biyeah.iteye.com/images/icon_star.png)
- 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圆.则可以在正方 ...
最新文章
- arm中断保护和恢复_ARM中断异常处理的返回
- LRU算法确定最后使用时间的顺序
- Bootstrap(8) 路径分页标签和徽章组件
- 《Objective-c》-(内存管理之三:@property的内存管理)
- php time 循环不变,PHP为系统调用的脚本设置超时,set_time_limit不起作用
- redis key设计技巧
- 博途变量类型_PLC数据类型(UDT)
- 微软邮件服务器名称,邮箱服务器角色概述
- simulink仿真实例_又见Simulink库模型之(9):自定义函数
- python3 二进制文件比较_《Python 3程序开发指南(第2版•修订版)》——7.4 随机存取二进制文件...
- C#:系统学习笔记(一)MVC基础篇
- ajax php断点调试,关于javascript:如何在jquery ajax调用期间调试php
- MTK FM收音机修改门限减少杂台
- 面向公交营运管理的车路协同应用场景研究
- 分享阿里云ace考试攻略 详解ACP认证考试须知
- (转)Weblogic 8.1的安装与配置
- 《科研诚信与学术规范》参考答案最新版
- mysql提取身份证生日并查询指定月份的数据
- 展开阅读全文代码html,展开阅读全文 js 爬虫操作
- AnnexB与avcc的区别