我们说我们有以下数组:
%w(apple apple apple banan orange orange tomato orange apple apple)
我可以输出,同时迭代集合,"这里有2个橙子"或者"这些是2个橙子"?
更新
集合中可能会有更多相同项目的出现,但我关注的是这个系列 - 当它们属于同一类时,会有多少个相继出现。
答案 0 :(得分: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