2014-09-25 2 views
0

Допустим, мы имеем следующий массив:Понимать серию в коллекции во время итерации

%w(apple apple apple banan orange orange tomato orange apple apple) 

Могу ли я выход, в то время как итерация по коллекции, «здесь идет 2 апельсина» или «это были 2 апельсинов»?

Update
Там может быть больше мест где же элемента в коллекции, но то, что меня беспокоит это серия - сколько есть один за другим, когда они одного и того же рода.

+0

'ставит«здесь приходит # {array.count ('апельсин')} апельсины "будут работать? Если нет .. Вы должны спросить более четко. –

+1

Ну .. Посмотрите это - http://apidock.com/ruby/Enumerable/slice_before –

+0

Wow thanks. Если у вас есть время, не могли бы вы привести пример реализации? – Numbers

ответ

1

Вы можете использовать Enumerable#chunk:

arr = %w(apple apple apple banan orange orange tomato orange apple apple) 
arr.chunk { |e| e }.to_a 
# => [["apple", ["apple", "apple", "apple"]], 
#  ["banan", ["banan"]], 
#  ["orange", ["orange", "orange"]], 
#  ["tomato", ["tomato"]], 
#  ["orange", ["orange"]], 
#  ["apple", ["apple", "apple"]]] 

С each цикла:

arr.chunk { |e| e }.each { |e, a| puts "#{a.size} #{e}" } 

Выход:

3 apple 
1 banan 
2 orange 
1 tomato 
1 orange 
2 apple 
Смежные вопросы