Arrays ruby是否支持可枚举映射方法或其等效方法?

Arrays ruby是否支持可枚举映射方法或其等效方法?,arrays,ruby,cons,Arrays,Ruby,Cons,Ruby有一个方便的枚举函数,名为。它“为每个连续元素数组迭代给定的块。”这真的很好。除了这绝对是一个each方法,它在完成时返回nil,而不是像map那样循环的值数组 但是,如果我需要迭代一个可枚举类型,获取一个元素及其cons,然后对它们执行一些操作并将它们返回到数组中,我能做什么?通常,我会用map来做这种行为。但是map\u cons不存在 例如: 给定一个整数列表,我需要查看这些整数中的哪些重复并返回一个仅包含这些整数的列表 [1, 1, 4, 5, 6, 2, 2] ## I nee

Ruby有一个方便的枚举函数,名为。它“为每个连续元素数组迭代给定的块。”这真的很好。除了这绝对是一个
each
方法,它在完成时返回nil,而不是像
map
那样循环的值数组

但是,如果我需要迭代一个可枚举类型,获取一个元素及其cons,然后对它们执行一些操作并将它们返回到数组中,我能做什么?通常,我会用map来做这种行为。但是
map\u cons
不存在

例如:

给定一个整数列表,我需要查看这些整数中的哪些重复并返回一个仅包含这些整数的列表

[1, 1, 4, 5, 6, 2, 2] ## I need some function that will get me [1, 2]
我可以说:

[1, 1, 4, 5, 6, 2, 2].each_cons(2) {|e| e[0] if e[0] == e[1]}
但是,由于它将
每个
覆盖整个数组,因此它将成功完成并在最后返回
nil
。我需要它的行为像
map
,而不是像
每个


这种行为是ruby支持的吗?我完全是从错误的方向来的吗?

只需添加
map

[1, 1, 4, 5, 6, 2, 2].each_cons(2).map { |e| e[0] if e[0] == e[1] }
=> [1, nil, nil, nil, nil, 2]

每个_cons的文档都以这样一个无辜的短语结尾:“如果没有给出块,则返回一个枚举数。”大多数可枚举方法都是这样做的。你能用枚举器做什么。但枚举数包括Enumerable,它确实提供了大量强大的方法,
map
就是其中之一。因此,正如Stefan Pochmann所做的那样:

[1, 1, 4, 5, 6, 2, 2].each_cons(2).map { |e| e[0] if e[0] == e[1] }

调用每个_cons
时不带块,因此它返回一个枚举数<代码> map 只是它的一种方法。

因为我们在处理成对,考虑使用<代码> map {a a,ba a,如果a=(b=b} < /代码>)。也许没有真正令人印象深刻,但是没有块的枚举器仍然可以方便使用。例如,
enum=[:偶数,:奇数].cycle#=>#;enum.next;#=>:即使enum.next#=>:奇数;enum.next#=>:偶数。。。