1

我在 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

我读过哈希迭代器以随机顺序返回哈希,但这似乎到目前为止有效。

现在我需要对频率进行散列以仅包含 20 个最常用的单词。我怎样才能做到这一点?谢谢阅读。

4

1 回答 1

4

正如您可能已经看到的那样,它保持排序的原因是因为您的调用将Enumerable#sort_by您更改HashArray. 从该方法的文档中:

sort_by 的当前实现生成一个包含原始集合元素和映射值的元组数组。

一旦你有你的排序数组,你可以用它Array#first来获得前 20 名:

top20 = freqs.first(20)

如果您愿意,您可以使用to_hashon 结果将其返回到 a Hash,但它将不再被排序。

于 2010-08-31T01:33:49.880 回答