我有一个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/

10-10 18:37