我有一个Ruby散列,它存储字符串的单词频率,单词作为键,频率作为值。
words = a_string.split(/ /)
freqs = Hash.new(0)
words.each { |word| freqs[word] += 1 }
freqs = freqs.sort_by {|x,y| y }
freqs.reverse!
freqs.each do |word, freq|
puts word+' '+freq.to_s
end
我读过散列迭代器以随机顺序返回散列,但到目前为止这似乎是可行的。
现在我需要freqs hash只包含20个最常用的单词我该怎么做谢谢你的阅读。
最佳答案
正如您可能已经看到的,它保持排序的原因是您对Enumerable#sort_by
的调用将您的Hash
更改为Array
从该方法的文档中:
sort_by的当前实现生成包含原始集合元素和映射值的元组数组。
一旦得到排序数组,就可以使用Array#first
获得前20名:
top20 = freqs.first(20)
如果需要,可以对结果使用
to_hash
将其返回到Hash
,但将不再对其进行排序。关于ruby - 如何基于Ruby中的值拆分哈希?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3605455/