[英]How to split an array into sub-arrays based on integer values
我需要知道如何根据数组中整数的值将数组分成子数组。 我要做的是拿一个大型数组并将其分解为1-10,11-20,21-30 ...等等,然后我需要能够计算这些子数组,所以我有数字就像“1个1-10之间的整数,11-20之间的6个整数,21-30之间的12个整数。”
我有一个单行随机数生成器,它将给我我的数组如下:
rand_num = (Array.new(200) {(1..100).to_a[rand(100)]})
这给了我200到100个随机数在1到100之间的数组,现在我需要能够根据值将它们分开并告诉每个数字。
然后我需要它来显示这些数字。 我到处搜索,我想说你用.partition做这件事,但我无法让它工作。
如果您的存储桶真的那么简单,那么您可以像这样使用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]]
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之间等.ps我没有在任何地方运行此代码,因此它可能有错误;)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.