From:http://blog.jayfields.com/2008/03/ruby-inject.html

实体分析

Ruby代码   
  1. [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的初始值为数组元素的第一个值。所以上例可改写成:

Ruby代码   
  1. [1, 2, 3, 4].inject{ |result, element| result + element }

这时执行block的次数为3次。

文章中还提到也其它用法:

Ruby代码   
  1. hash = [[:first_name, 'Shane'], [:last_name, 'Harvie']].inject({}) do |result, element|
  2. result[element.first] = element.last
  3. result
  4. end
  5. hash # => {:first_name=>"Shane", :last_name=>"Harvie"}

把array转换成hash表。有也第一个例子的基础,这个例子应该很容易看得懂。

再看一个例子,需要对一数组元素进行过滤并进行一些加工,

Ruby代码   
  1. [1, 2, 3, 4, 5, 6].select { |element| element % 2 == 0 }.collect { |element| element.to_s } # => ["2", "4", "6"]

上面代码实现选取数组中的偶数,并把它们转换成字符型。用inject如何实现呢?

Ruby代码   
  1. array = [1, 2, 3, 4, 5, 6].inject([]) do |result, element|
  2. result << element.to_s if element % 2 == 0
  3. result
  4. end
  5. array # => ["2", "4", "6"]

ruby inject,循环计算优化相关推荐

  1. android 对for循环进行优化

    今天,简单讲讲如何对for循环进行优化. 完成同样的功能,用不同的代码来实现,性能上可能会有比较大的差别,所以对于一些性能敏感的模块来说,对代码进行一定的优化还是很有必要. 作为三大结构之一的循环,在 ...

  2. 性能提升400倍丨外汇掉期估值计算优化案例

    在金融领域,合约的估值计算是个常见需求.几百万个合约,由于到期时间和期限长短不同,计算时往往对应不同的利率.合约匹配利率,最常见的做法是通过循环语句对每一个合约做计算.而 DolphinDB 中,可以 ...

  3. 流式计算优化:时效性 [王方浩视角]

    1. 背景-什么是流计算 在传统的数据处理流程中,总是先收集数据,然后将数据放到数据库中,当人们需要的时候通过查询对应的数据进行处理.这样看起来没什么大问题,但是当我们遇到以下场景的时候就有问题了.比 ...

  4. 使用循环计算斐波那契数列

    1 /* 2 * 使用循环计算斐波那契数列的前 20 项,已经前 20 项的和. 3 提示:斐波那契数列:1,1,2,3,5,8,13,21- 4 从第三项开始,每一项为前面两项的和 5 6 */ 7 ...

  5. SQL 难点解决:循环计算

    SQL 虽然可以对集合中的记录进行循环计算, 但在循环计算过程中利用中间变量.同时计算多个值.前后记录访问.减少循环次数等方面差强人意.而集算器 SPL 则要直观许多,可以按自然思维习惯写出运算.这里 ...

  6. ANSYS CFX 脚本详细设置,实现循环计算

    ANSYS CFX 脚本详细设置,实现循环计算 参考链接: https://www.zhihu.com/question/29498222

  7. 美图技术博客之地理空间距离计算优化

    http://tech.meituan.com/lucene-distance.html 地理空间距离计算优化 zhan2014-09-05 18:35 1 地理空间距离计算面临的挑战 打开美团app ...

  8. python用for循环求和1到100_python使用for循环计算0-100的整数的和方法

    python使用for循环计算0-100的整数的和方法 更新时间:2019年02月01日 09:23:07 作者:Lucifer-L 今天小编就为大家分享一篇python使用for循环计算0-100的 ...

  9. R语言while循环计算圆周率

    R语言while循环计算圆周率 原理说明 计算圆周率的方法很多,在这里我们使用概率的方法来计算圆周率(蒙特卡洛法). 假设有一个正方形,以其一个顶点为圆心,正方形的边长为半径,画1/4圆.则可以在正方 ...

最新文章

  1. 用IKVMC将jar转成dll供c#调用
  2. 【Splay】洛谷3372 【模板】线段树 1
  3. modelsim(1):经常使用的测试设计的结构
  4. 考拉海购全面云原生迁移之路
  5. 休宁天气预报软件测试,【休宁天气预报】休宁今天天气预报 - 天气史
  6. 全文索引的使用(二)--使用同义词库
  7. Wireshark详细使用教程
  8. SQL语句设置标识种子
  9. DOS编写脚本常用命令整理
  10. 【二】[详细]针孔相机模型、相机镜头畸变模型、相机标定与OpenCV实现
  11. 测试分类 test catagory
  12. rdesktop远程使用Windows的一些技巧
  13. Array.of()
  14. 眼球追踪如何预测头部追踪
  15. 地球上20张最惊人的照片_地球上30个惊人的自然景点
  16. 载体坐标系-惯性坐标系-世界坐标系
  17. Comet OJ - Contest #8 神奇函数(积性函数)
  18. Win10怎么设置窗口护眼色
  19. android怎么监听当前应用被卸载
  20. IIS三种应用程序池回收方法(保姆级教程)

热门文章

  1. ios与android设计适配,IOS与Android UI适配方案
  2. 模型部署到移动端_分分钟打开倾斜摄影模型,新版本的老子云移动端也太好用了吧!...
  3. 相同点安卓和iosui的相同点_iOS 8和安卓L详尽界面对比 风格有些相似?
  4. 苹果在线签名服务器搭建,苹果超级签名系统搭建
  5. android 实现微博分享,分享到微信微博QQ的简单实现(二)
  6. 斐波那契数列简单步骤分析
  7. 谈顺丰与菜鸟的数据断交事件
  8. 作为管理者如何提高员工工作效率?
  9. Invalid revision: 3.18.1-g262b901
  10. 2018年上安徽c语言试卷答案,安徽省2018年中考物理试题(含答案).doc