我需要知道如何根据数组中整数的值将数组分成子数组。我想要做的是拿一个大阵列并将其分解为1-10,11-20,21-30 ...等等,然后我需要能够计算这些子阵列,所以我有数字,就像" 7个整数在1-10之间,6个整数在11-20之间,12个整数在21-30之间。"
我有一个单行随机数生成器,它会给我我的数组如下:
rand_num = (Array.new(200) {(1..100).to_a[rand(100)]})
这给了我200到100个随机数在1到100之间的数组,现在我需要能够根据值将它们分开并告诉每个数字。
然后我需要它来显示这些数字。我到处搜索过,我想说你用.partition做这件事,但我无法让它发挥作用。
答案 0 :(得分:2)
如果您的存储桶真的那么简单,那么您可以像这样使用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]]
答案 1 :(得分:0)
results = {}
rand_num.each do |x|
if x%10 == 0
results[x/10 - 1] = [] unless results.key?(x/10 - 1)
results[x/10 - 1] << x
else
results[x/10] = [] unless results.key?(x/10)
results[x/10] << x
end
end
现在在键0中,您的数字在1-10之间,在键1中在11-20等之间。我没有在任何地方运行此代码,因此它可能有错误;)