2017-12-02 13 views
1

Ruby에는 each_cons이라는 열거 형의 편리한 함수가 있습니다. 어느 "연속 요소의 각 배열에 대해 주어진 블록을 반복합니다." 이것은 정말로 멋지다. 이것은 each 메소드를 제외하고는 완료시에 nil을 반환하고 루프 된 값의 배열은 map처럼 반환하지 않습니다.루비가 열거 형 map_cons 메소드 또는 이와 동등한 메소드를 지원합니까?

그러나 열거 형을 반복 할 필요가있는 상황에서 요소와 해당 단점을 취한 다음 일부 작업을 수행하고 다시 배열로 반환 할 수 있습니까? 일반적으로, 나는 이런 종류의 행동을 위해 map을 사용할 것입니다. 그러나 map_cons은 존재하지 않습니다.

예 :

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

는 정수의 목록을 감안할 때, 내가 말할 수있는 바로 그 정수

[1, 1, 4, 5, 6, 2, 2] ## I need some function that will get me [1, 2] 

을 목록을 그 정수의 사람이 반복되는보고 반환해야

그러나 어레이에 대해 each이 있으므로 성공적으로 완료되고 끝에 nil을 반환합니다. map처럼 동작하고 each을 좋아하지 않아야합니다.

ruby가 지원하는 동작입니까? 내가 완전히 잘못된 방향에서 오는 것인가?

답변

3

each_cons 문서는이 무고한 문구로 끝 ". 더 블록을 지정하지 않으면, 열거를 돌려줍니다" Enumerable의 대부분의 메소드는 이것을합니다. 열거 자에게 무엇을 할 수 있습니까? Nothing truly impressive. 그러나 Enumerators에는 많은 양의 강력한 메서드를 제공하는 Enumerable이 포함되어 있습니다. map이 그 중 하나입니다. 그래서, 스테판 Pochmann는 마찬가지로 :

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

each_cons이 블록없이 호출, 그것은 열거자를 반환 있도록. map은 그 방법 중 하나 일뿐입니다.

+0

우리는 쌍을 다루기 때문에'map {| a, b | a == b}'이면. –

+0

아마도 정말로 인상적이지는 않지만 블록이없는 열거 자 (enumerator)는 여전히 유용 할 수 있습니다. 예 :'enum = [: even, : odd] .cycle # => # <열거 자 : [: even, : odd] :주기>; enum.next; # => : 짝수; enum.next # => : 홀수; enum.next # => : 심지어'... –

3

그냥 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]