Ruby 尝试使用单词|值创建哈希,但我的值始终为1

Ruby 尝试使用单词|值创建哈希,但我的值始终为1,ruby,Ruby,我试着做一个练习,你把一个短语,我定义为可变文本,然后把文本分成单独的单词words=text.split。然后,我创建一个名为frequencies的新哈希,并尝试为每个单词指定一个值,如1,2,3,以便以后可以按该值对它们进行排序。但是当我运行这个时,每个单词的值都是1。我希望它是1,2,3等等 puts "please enter a phrase" text=gets.chomp words=text.split frequencies=Hash.new(0) words.each

我试着做一个练习,你把一个短语,我定义为可变文本,然后把文本分成单独的单词words=text.split。然后,我创建一个名为frequencies的新哈希,并尝试为每个单词指定一个值,如1,2,3,以便以后可以按该值对它们进行排序。但是当我运行这个时,每个单词的值都是1。我希望它是1,2,3等等

puts "please enter a phrase"
text=gets.chomp

words=text.split

frequencies=Hash.new(0)

words.each do |word|
    frequencies[word]+= 1
end

frequencies = frequencies.sort_by { |a, b| b }
frequencies.reverse!
这就是他们的价值所在。为什么它们都是1

please enter a phrase
 Top of the morning to you
[["you", 1], ["to", 1], ["morning", 1], ["the", 1], ["of", 1], ["Top", 1]]

您需要按以下方式编写:-

puts "please enter a phrase"
text=gets.chomp

words=text.split

frequencies = Hash.new(0)

words.each do |word|
    frequencies[word]+= 1
    frequencies.default += 1
end

frequencies = frequencies.sort_by { |a, b| b }
p frequencies.reverse!
-。如果指定了obj,则此单个对象将用于所有默认值

当您设置默认值时,当您执行哈希[]时,您将获得默认值,如果您尝试访问的密钥尚未添加到哈希中。现在当你做频率[word]+=1时,它意味着频率[word]=frequencies[word]+1。因此,第一次返回RHS上的频率[word],默认值*,然后whis增加1,得到关键字的单词哈希。但您根本没有更改默认值。你,到,早上。。是不同的键,您可以在每次迭代中为其赋值

我希望它是1,2,3等等


然后,在每次迭代中,您都需要更改默认值,以满足您的需要。这可以通过使用来完成。

您正在计算单词的频率-数字是在文本中找到单词的次数。由于示例文本中的每个单词都是唯一的,因此所有单词的答案都是1。如果要为每个单词指定递增的值,可以执行以下操作:

frequencies = Hash[words.zip(1..words.count)]

但我不确定这是你真正想要的,因为你实际上称它为频率,这就是你在代码中实际计算的频率。

每个单词在你的句子中只出现一次,所以1似乎是正确的结果。您希望哪一个值为2和3,为什么?这很好。我得到以下信息:请输入一个短语;a b;[a,3],[b,2]]。您的示例输出似乎没有反映任何问题,除非您实际上只输入每个单词一次。如果没有看到您的输入样本,就无法猜测。我明白了。。非常感谢,非常感谢。如果有人有一个董事会,他们可以推荐初学者,你能让我知道吗?我不确定在哪里张贴我的问题是最好的。否决票让我觉得我的问题对这个董事会来说有点太简单了。我真正学习Ruby才几周,所以我仍然遇到了很多可能会困扰ppl的问题。我不是反对者之一,但我认为反对者的原因是你的代码看起来很完美,所以人们不清楚问题到底是什么。关于问题的问题,要么不存在,要么无法再现,往往会被否决,因为没有人能从阅读中学到很多东西,甚至不清楚如何回答。明白了!谢谢,这很有道理。