Если ваши корзины действительно настолько просты, то вы можете использовать group_by
следующим образом:
array.group_by { |n| (n - 1) / 10 }
Это даст вам хэш, как это:
{0=>[1, 2, 3, ...], 1=>[11, 12, 13, ...], ...}
, тогда вы просто добавляете sort_by
, чтобы вызвать хороший порядок, и map
, чтобы подвести итоги:
array.group_by { |n| (n - 1) / 10 }.
sort_by { |k, v| k }.
map { |n, a| [10 * n + 1 .. 10 * (n + 1), a.length] }
Например:
# The %7 is just an easy way to get a non-uniform set.
>> (1..100).select { |n| n % 7 == 0 }
=> [7, 14, 21, 28, 35, 42, 49, 56, 63, 70, 77, 84, 91, 98]
>> (1..100).select { |n| n % 7 == 0 }.sort_by { |k, v| k }.group_by { |n| (n - 1) / 10 }.map { |n, a| [10 * n + 1 .. 10 * (n + 1), a.length] }
=> [[1..10, 1], [11..20, 1], [21..30, 2], [31..40, 1], [41..50, 2], [51..60, 1], [61..70, 2], [71..80, 1], [81..90, 1], [91..100, 2]]