Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

slice_beforeをindexを付加して回したい

Q&A

Closed

numbers = %w[1 2 3 5 8 9 14 16 45].map(&:to_i)

があったとして[1, 2, 3], [5] [8] [9] [14] [16] [45]みたいにしたい時に、indexを付け1つ前の要素と比較しながらslice_beforeしたかった。

numbers = %w[1 2 3 5 8 9 14 16 45].map(&:to_i)
# => [1, 2, 3], [5] [8] [9] [14] [16] [45]

# こういう風には出来ない
# numbers.slice_before.with_index{|number, index| ... }
# ArgumentError: wrong number of arguments (given 0, expected 1)

# 苦肉の策で今はこうしている
numbers.zip(0...numbers.size).slice_before{|number, index| ... }

slice_beforeslice_before(pattern)のように引数を取れるパターンもあるのでArgumentErrorが起きると思うが、with_indexはこういう場合はやはり付けられないでしょうか?

0

1Answer

each_with_indexはブロックを省略した場合、要素とインデックスを含むEnumeratorを返すので、これを以下のように利用すればよいかと思います。

numbers.each_with_index.slice_before{|number, index| ... }
1Like

Comments

Your answer might help someone💌