Ruby中的inject
参考: ruby-inject
刚接触inject时,对其了解不是很深,直看到这篇文章 ruby-inject,才有了新的认识,文章配合大量例子进行说明。
1、先看最简单的求和例子,我们从这里分析inject的实现机制。
- [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"]
是不是更直观?
文章后面还提到复杂的应用,有些还看不明,以后看明也再补充吧,有兴趣的读者可以直接看原文。
相关推荐
以下是对该课程的个人笔记中涉及知识点的详细解读。 机器学习是人工智能的核心组成部分,它的研究目标是使计算机能够通过模拟或实现人类的学习行为,从而获得新的知识或技能,并优化已有的知识结构以提高性能。机器...
【个人笔记本】是一款基于Python编程语言的开源笔记应用,它集成了Tkinter库,用于创建图形用户界面(GUI)。Tkinter是Python的标准GUI库,它提供了丰富的控件和布局管理器,使得开发者能够轻松地构建出功能完备的...
斯坦福大学机器学习课程个人笔记完整版.pdf 目录 (1)线性回归、logistic回归和一般回归 1 (2)判别模型、生成模型与朴素贝叶斯方法 10 (3)支持向量机SVM(上) 20 (4)支持向量机SVM(下) 32 (5)规则化和模型选择 45...
oracle adg安装个人笔记oracle adg安装个人笔记oracle adg安装个人笔记oracle adg安装个人笔记oracle adg安装个人笔记oracle adg安装个人笔记oracle adg安装个人笔记oracle adg安装个人笔记oracle adg安装个人笔记...
【Python-定位个人笔记和公司内部知识仓库基于djangovue的笔记软件】 在这个项目中,我们关注的是构建一个结合了个人笔记管理与企业内部知识仓库功能的应用。它基于两个强大的技术栈:Django(一个高级Python Web...
摘要本笔记是针对斯坦福大学2014年机器学习课程视频做的个人笔记视频地址:https://www.bilibili.com/video/BV1W34y1i7xK
根据提供的文件信息,以下是对吴教授的机器学习个人笔记的内容概括以及相关的知识点总结。 首先,我们明确了这个笔记是吴教授在学习MIT机器学习公开课程时整理的笔记。这些笔记内容非常全面,既包括了机器学习的...
《机器学习个人笔记完整版2.5》是一份详尽的资料,涵盖了机器学习领域的核心概念、算法和实践应用。这份笔记旨在帮助读者深入理解机器学习的基础知识,并逐步提升到高级技术层面。作为人工智能的一个重要分支,机器...
shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人...
针对斯坦福大学 2014 年机器学习课程视频做的个人笔记
《机器学习个人笔记完整版.pdf.zip》是一个包含吴恩达教授机器学习课程详细笔记的压缩文件,这份资源对于想要深入理解和学习机器学习的人来说是极其宝贵的。吴恩达,作为人工智能和机器学习领域的知名专家,他的课程...
机器学习个人笔记完整版v5.4-A4打印版是基于斯坦福大学2014年开设的机器学习课程视频的个人学习笔记,由黄海广制作并提供。黄海广通过观看视频并结合中文字幕以及PPT资料,结合网络资源,整理出这套机器学习课程的...
这些更新不仅体现了个人笔记的时效性和准确性,也反映出了学习者对知识的不断追求和对错误的积极修正。 最后,黄海广的个人笔记中还包括了一系列的数学基础知识,比如线性代数回顾。这部分内容对于初学者来说尤其...
linux服务管理个人笔记linux服务管理个人笔记linux服务管理个人笔记linux服务管理个人笔记linux服务管理个人笔记linux服务管理个人笔记linux服务管理个人笔记linux服务管理个人笔记linux服务管理个人笔记linux服务...
linux基础管理个人笔记linux基础管理个人笔记linux基础管理个人笔记linux基础管理个人笔记linux基础管理个人笔记linux基础管理个人笔记linux基础管理个人笔记linux基础管理个人笔记linux基础管理个人笔记linux基础...
linux高级管理个人笔记linux高级管理个人笔记linux高级管理个人笔记linux高级管理个人笔记linux高级管理个人笔记linux高级管理个人笔记linux高级管理个人笔记linux高级管理个人笔记linux高级管理个人笔记linux高级...
oracle rac安装个人笔记oracle rac安装个人笔记oracle rac安装个人笔记oracle rac安装个人笔记oracle rac安装个人笔记oracle rac安装个人笔记oracle rac安装个人笔记oracle rac安装个人笔记oracle rac安装个人笔记...
这份个人笔记详细深入地介绍了Elasticsearch的核心概念和使用方法,旨在帮助读者全面理解和掌握这个强大的工具。 笔记首先会从基础入手,讲解Elasticsearch的基本架构。Elasticsearch是分布式的,由节点(Node)...