From:http://blog.jayfields.com/2008/03/ruby-inject.html
实体分析
- [1, 2, 3, 4].inject(0) { |result, element| result + element }
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
把array转换成hash表。有也第一个例子的基础,这个例子应该很容易看得懂。
再看一个例子,需要对一数组元素进行过滤并进行一些加工,
- [1, 2, 3, 4, 5, 6].select { |element| element % 2 == 0 }.collect { |element| element.to_s }
上面代码实现选取数组中的偶数,并把它们转换成字符型。用inject如何实现呢?
- array = [1, 2, 3, 4, 5, 6].inject([]) do |result, element|
- result << element.to_s if element % 2 == 0
- result
- end
-
- array
分享到:
相关推荐
VC代码 RT_INJECT (实用代码源)VC代码 RT_INJECT (实用代码源)VC代码 RT_INJECT (实用代码源)VC代码 RT_INJECT (实用代码源)VC代码 RT_INJECT (实用代码源)VC代码 RT_INJECT (实用代码源)VC代码 RT_INJECT (实用代码...
《Java注射框架——javax.inject详解》 在Java开发中,依赖注入(Dependency Injection,简称DI)是一种设计模式,它能够使代码更加灵活、可测试和易于维护。javax.inject是Java平台上的一个标准注入API,它是JSR ...
Usage: injectdll.exe [process name] [dll path] [option number]option 1 - CreateRemoteThreadoption 2 - NtCreateThreadExoption 3 - RtlCreateUserThread
2. **Ruby Reduce**: Reduce(也称为fold或inject)函数用于对数组的所有元素进行累积操作,通常用于聚合操作,如求和、乘积或计算平均值。例如,计算数组元素的总和: ```ruby numbers = [1, 2, 3, 4, 5] sum =...
【标题】"官方jar包javax-inject.jar"指的是Java编程语言中的一个官方发布的库文件,主要包含`javax.inject`包下的类和接口。这个jar包是Java依赖注入(Dependency Injection,简称DI)的一个实现,主要用于简化对象...
Spring 依赖的 javax.inject.Provider
官网上说provide 和 inject 绑定并不是可响应的。这是刻意为之的。然而,如果你传入了一个可监听的对象,那么其对象的属性还是可响应的。 provide: Object | () => Object(一个对象或返回一个对象的函数) inject...
Ruby中有很多高效的编程习惯和技巧,例如使用块(blocks)、Proc对象和Lambda表达式来替代循环结构。`fast-ruby` 项目提供了这些方面的比较,展示了如何通过改变编程习惯来提高代码执行速度。 2. **方法调用优化**...
"inject.dmg"和"inject.dmg.signature"这两个文件在iOS系统中具有特殊的意义。通常,".dmg"文件是Disk Image的缩写,它是Mac OS X系统中的一个镜像文件格式,用于存储和分发软件。在iOS上下文中,".dmg"文件可能被...
在iOS 13中,位置服务有了显著的改进和优化,包括更精确的定位,更高的隐私保护以及对后台应用访问位置数据的严格控制。例如,用户现在可以设置“一次位置”权限,只允许应用在特定的一次使用中获取位置信息。此外,...
"javax-inject.jar" 是一个专门用于解决此类问题的库,它包含了`javax.inject`包,这个包是Java注射注入(Dependency Injection,简称DI)的一个重要组成部分。在本文中,我们将深入探讨`javax.inject`包的作用、...
《自动注入工具——AutoInject小析》 在网络安全领域,DLL注入是一种常见的技术,它允许一个进程将自身的代码注入到另一个进程中执行,从而实现各种目的,如监控、调试或者恶意攻击。本文主要针对名为"AutoInject...
除了`each`方法,Parallel库还提供了其他方法,如`map`、`inject`等,这些都是并行版本的内置Ruby方法,方便在并行环境下使用熟悉的编程模式。 在实际应用中,理解并行处理的潜在问题也至关重要,如数据竞争、死锁...
code inject 逆向工程 做一些工具必备
此外,Enumerable模块是一组用于遍历和操作集合的强大工具,它包含的`inject`和`reduce`方法可以执行聚合操作,`group_by`则可以按条件对元素分组。 Ruby的模块(Module)和类(Class)系统使得代码组织和复用变得...
PostCSS本身是一个框架,它接收CSS作为输入,然后通过一系列的插件进行处理,最后输出优化过的CSS。这些插件可以完成各种任务,如自动添加浏览器前缀、转换CSS新语法、移除未使用的CSS规则等。而PostCSS Inject则是...
sisu-inject-bean-1.4.2.jar
标题中的"Inject HTTP.zip_Inject HTTP vb6_Inject2Download_http inject_inje"暗示了这个压缩包文件可能包含了关于在VB6(Visual Basic 6)环境下实现HTTP注入的技术和工具。HTTP注入通常指的是向HTTP请求中插入...
6. **性能优化**:为了减少DOM操作的性能开销,可能采用了延迟加载、批量更新等策略。 7. **版本管理**:通过Git进行版本控制,master分支代表了项目的主线发展。 8. **社区支持**:开源意味着有活跃的社区,...