gpt4 book ai didi

ruby - 以 10 为增量计算数组中从 1 到 100 的整数

转载 作者:太空宇宙 更新时间:2023-11-03 17:45:08 27 4
gpt4 key购买 nike

a = Array.new(200) { rand(1..100) }.sort!

puts a.count{ |a| (a > 0 && a < 11) }
puts a.count{ |b| (b > 10 && b < 21) }
puts a.count{ |c| (c > 20 && c < 31) }

puts a.inspect

所以我可以一直重复这个直到 100 行,但是我正在寻找一个捷径来计算所有数字对,顶部有一行(添加到一行)。希望每 10 个(1-10、11-20 等)都有一个不同的变量,我可以稍后调用。或者至少能够转换它。

使变量像

b = a.count{ |c| (c > 20 && c < 31) }

所以以后我可以用它来制作一个像这样的字符串

puts "#" * b

所以这一切的最终结果如下所示

1-10 #########################
11-20 ##############################
21-30 ######################

每个 # 代表有多少 1-10。

最佳答案

counts = 10.times.map { |i| (i + 1)...(i + 11) }.map { |range|
a.count { |x| range.include? x }
}

counts[0]
# => 17 (number of numbers in 1...11)
counts[1]
# => 20 (number of numbers in 11...21)
counts[2]
# => 22 (number of numbers in 21...31)
# ...

编辑:或者更简单,通过利用一个简单的数学属性:

counts = a.group_by { |x| (x - 1) / 10 }.map { |k, v| v.count }

Hopefully each 10 (1-10, 11-20, etc) has a different variable that I can call later on.

既然可以有一个数组,为什么还需要不同的变量?

EDIT2:整个程序,1-4 行:

array = 200.times.map { rand(1..100) }.sort
array.group_by { |x| (x - 1) / 10 }.each do |k, v|
puts "%2d-%2d %s" % [k * 10 + 1, k * 10 + 10, "#" * v.count]
end

翻译:做两百次迭代,构造一个数组,每个元素都是1到100之间的随机数。然后将数组除以10的结果分组(调整为1,所以我们没有范围0-9、10-19...);迭代包含除法结果和项目的散列,打印边界(从除法结果重建开始和结束)以及与每个组中的项目数对应的散列数。

EDIT3:正如 Stefan 指出的那样,我们可以使用 chunk 因为数组是排序的,可以加快速度。上面的 group_by 并不关心正在排序的数组。您可以简单地将 group_by 替换为 chunk,即使它们返回不同的类型,只是因为迭代哈希与迭代双元素数组的方式相同。

array = 200.times.map { rand(1..100) }.sort
array.chunk { |x| (x - 1) / 10 }.each do |k, v|
puts "%2d-%2d %s" % [k * 10 + 1, k * 10 + 10, "#" * v.count]
end

关于ruby - 以 10 为增量计算数组中从 1 到 100 的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40169001/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com