ruby - How to split an array into sub-arrays based on integer values -
ruby - How to split an array into sub-arrays based on integer values -
i need know how break array sub-arrays based on value of integers in array. i'm trying take big array , break 1-10, 11-20, 21-30...etc , need able count sub arrays have numbers "7 integers between 1-10, 6 integers between 11-20, 12 integers between 21-30."
i've got single line random number generator give me array following:
rand_num = (array.new(200) {(1..100).to_a[rand(100)]})
this gives me array of 200 hundred random numbers between 1 , 100 , need able split them apart according value , tell how much in each one.
then need display numbers. i've searched everywhere , want .partition, can't work.
if buckets simple utilize group_by
this:
array.group_by { |n| (n - 1) / 10 }
that give hash this:
{0=>[1, 2, 3, ...], 1=>[11, 12, 13, ...], ...}
then throw in sort_by
forcefulness nice ordering , map
summarize results:
array.group_by { |n| (n - 1) / 10 }. sort_by { |k, v| k }. map { |n, a| [10 * n + 1 .. 10 * (n + 1), a.length] }
for example:
# %7 easy way 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]]
ruby split integer arrays
Comments
Post a Comment