返回语音中排名前10位最常用的单词,不包括Ruby的单词列表

时间:2015-03-01 19:12:21

标签: ruby

我需要一些帮助来弄清楚如何做到这一点。我知道你是用Hashes做的,所以这就是我到目前为止所做的。

count = Hash.new()
speech {|word| count[word] += 1}

之后我就被困住了。如何回归前10个单词?它会是这样的吗?

count.sort
return count[1..10]

另外,我如何排除列表中我不想包含的任何单词?它会是这样的吗?

wanted_words = speech.select { |word| !excluded_words.include?(word) }

Arup的详细说明:

所以说我有这个哈希:

hash = Hash.new()
hash["cats"] = 1
hash["blaks"] = 2
hash["Pogs"] = 13
hash["Dogs"] = 12

如何创建具有最大值的前2个单词列表? 基本上,我希望“Pogs”和“Dogs”返回,因为它们具有最大的值(分别为13和12)。

3 个答案:

答案 0 :(得分:1)

您可以使用方法#max_by

max_by(n)→obj

  

如果给出了n参数,则最小n个元素将作为数组返回。

count.max(10) { |_, v| v }

根据第二个问题,使用#reject

speech.reject { |word| excluded_words.include?(word) }

虽然#reject! bang 版本。使用哪一个符合您的需要。

<强>更新

hash = Hash.new()
hash["cats"] = 1
hash["blaks"] = 2
hash["Pogs"] = 13
hash["Dogs"] = 12

hash.max_by(2) { |_, v| v } # => [["Pogs", 13], ["Dogs", 12]]
hash.max_by(2) { |_, v| v }.map(&:first) # => ["Pogs", "Dogs"]

注意:#min#min_by#max#max_by支持optional argument Ruby 2.2.0 返回多个元素起。

答案 1 :(得分:1)

试试这个

hash.max_by(2) { |k, v| [v, k] }.map(&:first)

答案 2 :(得分:0)

与往常一样,ruby中有多种处理方式。

hash
  .sort_by { |_, value| value }
  .collect { |key, _| key }
  .last(2)

不一定比已经建议的好,但我喜欢它翻译成英语句子的方式,这样就很容易理解。