4

ブロックnの実行中に反復をスキップすることはできますか?each

persons.each_cons(2) do |person|
  if person[0] == person[1]
    #SKIP 2 iterations
  end

  puts "Howdy? #{person[0]}"
end
4

3 に答える 3

1

直接それを行うことはできません。

配列を呼び出すuniqか、順序が重要な場合は、新しいchunkメソッドを確認してください。

[1,1,1,2,1,3].uniq # => [1,2,3]
[1,1,1,2,1,3].chunk{|e| e}.map(&:first) # => [1,2,1,3]
# i.e. two adjacent items will always be different
于 2012-07-16T16:49:27.440 に答える
0

これを行う別の方法は、実際には ruby​​ とは異なりますが、each反復子を使用することです。

persons = [1,1,2,2,2,3,4,4,5,5,6,7,8,9]

persons_iterator = persons.each
begin
  while first_person = persons_iterator.next do
    second_person = persons_iterator.next
    if first_person == second_person
      persons_iterator.next.next # Skip 2 iterations
    end

    puts "Howdy? #{first_person}"
  end
rescue StopIteration
  # Iterator end
end
于 2012-07-16T18:47:10.053 に答える