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. arm中断保护和恢复_ARM中断异常处理的返回
  2. LRU算法确定最后使用时间的顺序
  3. Bootstrap(8) 路径分页标签和徽章组件
  4. 《Objective-c》-(内存管理之三:@property的内存管理)
  5. php time 循环不变,PHP为系统调用的脚本设置超时,set_time_limit不起作用
  6. redis key设计技巧
  7. 博途变量类型_PLC数据类型(UDT)
  8. 微软邮件服务器名称,邮箱服务器角色概述
  9. simulink仿真实例_又见Simulink库模型之(9):自定义函数
  10. python3 二进制文件比较_《Python 3程序开发指南(第2版•修订版)》——7.4 随机存取二进制文件...
  11. C#:系统学习笔记(一)MVC基础篇
  12. ajax php断点调试,关于javascript:如何在jquery ajax调用期间调试php
  13. MTK FM收音机修改门限减少杂台
  14. 面向公交营运管理的车路协同应用场景研究
  15. 分享阿里云ace考试攻略 详解ACP认证考试须知
  16. (转)Weblogic 8.1的安装与配置
  17. 《科研诚信与学术规范》参考答案最新版
  18. mysql提取身份证生日并查询指定月份的数据
  19. 展开阅读全文代码html,展开阅读全文 js 爬虫操作
  20. AnnexB与avcc的区别

热门文章

  1. 学编程太枯燥?分享十几个边玩游戏边学编程的网站!第五个连孩子都在用
  2. 销魂的12306验证码
  3. 20岁与30岁的恋爱观
  4. c语言自带函数游戏,c语言消除游戏(带排行榜)
  5. 瑞星创始人——王新 刘旭
  6. MySQL:SQL通用语法、SQL分类、DDL、DML、DQL、DCL
  7. hutool 读取扩展名文件_批量修改文件名,一键就可以
  8. Java版打飞机小游戏
  9. 手把手带你撸一遍vue-loader源码
  10. 新增 130 亿美元债务,马斯克要如何让 Twitter “活”下去?