在迭代期间理解集合中的系列

时间:2014-09-25 12:48:07

标签: ruby-on-rails ruby

我们说我们有以下数组:

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

我可以输出,同时迭代集合,"这里有2个橙子"或者"这些是2个橙子"?

更新
集合中可能会有更多相同项目的出现,但我关注的是这个系列 - 当它们属于同一类时,会有多少个相继出现。

1 个答案:

答案 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