gpt4 book ai didi

ruby - 如何按哈希中的值排序?

转载 作者:太空宇宙 更新时间:2023-11-03 16:12:39 25 4
gpt4 key购买 nike

所以我做了一个随机数生成器,它应该计算数字的频率并按排序顺序显示它们。我正在尝试使用 .sort 但我无法弄清楚将它放在哪里以按顺序对哈希值进行排序。到目前为止我所拥有的:

MIN_VALUE = 1
count = 0


puts "Enter a number of random integers to generate"
resp = gets.to_i
p "number of integers generated is #{resp}"


puts "Now enter the maximum value the integers can be"
max_value = gets.to_i
p "max value is set to #{max_value}"


size = Array.new(resp)


while (count < resp)

int_value = (rand(MIN_VALUE..max_value))
size.push(int_value)
count = count + 1

end


puts size



freq = Hash.new(0)
size.each { |x| freq[x] += 1 }
freq.map{ |key, value| "#{key}x#{value}" }.join(',')



freq.each do |key,value|
puts "Frequency of #{key} is: #{value}"

end

非常感谢任何帮助!

最佳答案

大致相同的汤,在 Integer#times 中生成随机数循环:

upper_number = 10
sample_size = 100

freq = Hash.new(0) # initializing the hash with a default value of zero, for counting
sample_size.times { freq[rand((1..upper_number))] += 1 } # here the loop generating and counting
freq #=> {5=>13, 7=>10, 1=>11, 2=>13, 8=>13, 9=>6, 3=>6, 6=>9, 10=>11, 4=>8}

然后你可以按频率排序(倒序:-v)和样本值排序(k),[-v, k]:

freq.sort_by{ |k, v| [-v, k] }.to_h #=> {2=>13, 5=>13, 8=>13, 1=>11, 10=>11, 7=>10, 6=>9, 4=>8, 3=>6, 9=>6} # for this run
freq.sum { |_, v| v} #=> 100 # of course

关于ruby - 如何按哈希中的值排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58020204/

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