如何根据 Ruby 中的值拆分哈希?

发布于 2024-09-16 18:45:00 字数 356 浏览 8 评论 0原文

我在 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 哈希以仅包含 20 个最常见的单词。我该怎么做?感谢您的阅读。

I have a hash in Ruby that is storing the word frequency of a string, with the word as the key and the frequency as the value.

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

I've read that hash iterators return the hash in a random order, but this seems to work so far.

Now I need to freqs hash to only contain the 20 most frequent words. How can I do this? Thanks for reading.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

明月夜 2024-09-23 18:45:00

正如您可能已经看到的,它保持排序的原因是因为您调用 < code>Enumerable#sort_by 将您的 Hash 更改为 Array。从该方法的文档中:

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

一旦你有了排序后的数组,你就可以使用 Array#first< /code>获取前 20 名:

top20 = freqs.first(20)

如果需要,您可以在结果上使用 to_hash 将其返回到 Hash,但它不会不再排序。

As you've probably seen, the reason it stays sorted is because your call to Enumerable#sort_by changes your Hash into an Array. From the documentation for that method:

The current implementation of sort_by generates an array of tuples containing the original collection element and the mapped value.

Once you have your sorted array, you could just use Array#first to get the top 20:

top20 = freqs.first(20)

If you want, you could use to_hash on the result to return it back to a Hash, but it will no longer be sorted.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文