Rubyは、each_cons
と呼ばれる列挙型の便利な機能を備えています。どの「連続する要素の各配列に対して与えられたブロックを反復するか」。これは本当にいいですね。これは間違いなくeach
メソッドであり、完了時にはnilを返し、ループした値の配列ではなくmap
のように返します。rubyは、列挙可能なmap_consメソッドまたはそれに相当するメソッドをサポートしていますか?
しかし、私が列挙型を反復処理する必要がある状況では、要素とその短所をとり、その上でいくつかの操作を実行し、それらを配列に戻します。通常、この種の動作のためにマップを使用します。しかしmap_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]}
を
しかし、配列上にeach
があるため、正常に完了し、最後にnil
を返します。 map
のように振る舞い、each
のようにする必要があります。
これはrubyがサポートする動作ですか?私は間違った方向からそれに完全に来ていますか?
ペアを扱っているので、 'map {| a、b | a if == b} 'となります。 –
おそらく本当に印象的ではないかもしれませんが、ブロックのない列挙子はまだ手軽です。たとえば、 'enum = [:even、:odd] .cycle#=>#<列挙子:[:偶数、:奇数]:サイクル>; enum.next; #=>:偶数; enum.next#=>:odd; enum.next#=>:even' ... –