Ruby:映射和注入的区别

Ruby:映射和注入的区别,ruby,Ruby,阅读这里的各种解释,他们被描述为: 地图: map方法获取一个可枚举对象和一个块,并为每个元素运行该块 注入: Inject接受一个值和一个块,并为列表中的每个元素运行该块一次 希望你能理解为什么我觉得它们表面上很相似。什么时候我会选择一个而不是另一个,它们之间有什么明显的区别吗?将一个对象作为它的参数,执行一些操作并返回修改过的对象 arr = [] [1,2].inject(arr) { |s,e| s << e } arr # => [1,2] 使用#map,block

阅读这里的各种解释,他们被描述为:


地图:

map方法获取一个可枚举对象和一个块,并为每个元素运行该块


注入:

Inject接受一个值和一个块,并为列表中的每个元素运行该块一次

希望你能理解为什么我觉得它们表面上很相似。什么时候我会选择一个而不是另一个,它们之间有什么明显的区别吗?

将一个对象作为它的参数,执行一些操作并返回修改过的对象

arr = []
[1,2].inject(arr) { |s,e| s << e }
arr # => [1,2]

使用
#map
,block获取每个参数并将其递增
1
,递增的值将相同的索引放入新数组中,从中获取原始元素的索引。但是最后一个数组是一个新的数组,它与
arr
没有连接。当我做了<代码> p ARR <代码>时,我在<>代码> ARR 中得到了相同的内容,它在开始<代码>映射> <代码>操作之前。

它帮助您认为<代码>注销< /代码>也被别名为<代码> Reals>。code>map用于转换列表,例如将数组中的所有字符串转换为大写,而
inject
接受一个参数(通常是累加器)并对其进行修改

示例:

 %w(a b c).map(&:upcase) #=> ["A", "B", "C"]
 [*1..4].inject(:+) #=> 10

如果你想阅读更多,那么
inject
所做的被称为a。

使用
inject
你通常返回一个值(通常用于数学),而使用map你返回一个数组。

你有没有阅读过和的官方文档?我认为否决票是没有根据的。因此,如果以前没有人问过,那么我非常乐意重复最基本的核心语言文档。通常,不同的答案使用不同的措辞来解释同一件事,即使它们没有添加任何新的想法。有时,这对直观地理解这个概念有很大帮助。此外,我还惊讶于在我认为简单无聊的问题上,答案中出现了意想不到的微妙之处。是的,RTFM,但是如果以前没有人问过它,那么就来问吧。你说的方式让你更容易理解这些概念。谢谢对于本质上是聚合函数的东西,我发现执行
(1..4)更具可读性和直观性<代码>(1..4).sum#=>命名方法错误:1..4:Range`在普通Ruby中的未定义方法
sum`……尽管人们经常看到
a.inject([])
({})
,但我发现inject非常混乱,映射也非常直观。如果你只是求和,那么在你得到的数组中使用每个或一个聚合函数。
 %w(a b c).map(&:upcase) #=> ["A", "B", "C"]
 [*1..4].inject(:+) #=> 10