Ruby:地图和注射之间的区别



在这里阅读各种解释,因此它们被描述为:


地图:

地图方法采用一个枚举的对象和一个块,并为每个元素运行块


注入:

注入为一个值和一个块,它可以为列表的每个元素运行一次。

希望您理解为什么我觉得它们在表面上看起来很相似。我什么时候可以选择另一个,它们之间是否有明显的差异?

,如果您认为inject也将其视为reduce,它会有所帮助。map用于转换列表,例如将数组中的所有字符串转换为大写,而inject进行参数(通常是累加器)并修改。

示例:

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

如果您想阅读更多,inject的作用称为折叠。

inject以对象为参数,并进行了一些操作并返回该修改的对象。

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

在上面的示例中,请参见我传递一个空数组arr,但是在调用 #inject后,在块内我进行了 concatenation操作,并将其转到arr。之后,我打印了它,我可以看到arr现在保存了条目,即1,2

map创建一个新的Enumerable对象,该对象是基于接收器Enumerable对象创建的,您在其上称其为其。它将从接收器中获取每个元素,并将进行一些操作,并将其放入新的枚举元素中,然后接下来和接下来等等。

arr = [1,2]
arr.map { |e| e + 1 } # => [2,3]
arr # => [1,2]

使用#map,Block正在采用每个参数并通过1进行递增,并且它在新数组中列出了相同的索引的增量值,其索引从中获取了原始元素。但是最终数组是一个新数组,与arr没有连接。当我做p arr时,我在启动#map操作之前的arr中获得了相同的内容。

使用inject您通常返回一个值(通常用于数学),而使用地图则返回一个数组。

最新更新