试图理解为什么它可以';";将字符串转换为整数";(在散列上迭代的Ruby直方图)

试图理解为什么它可以';";将字符串转换为整数";(在散列上迭代的Ruby直方图),ruby,arrays,hash,Ruby,Arrays,Hash,在过去的45分钟左右的时间里,我一直在做这个代码学院的练习。问答论坛提出的解决方案没有一个奏效。代码如下 puts "Type something profound please" text = gets.chomp words = text.split frequencies = Hash.new 0 frequencies = frequencies.sort_by {|x,y| y} words.each {|word| frequencies[word] += 1} frequenci

在过去的45分钟左右的时间里,我一直在做这个代码学院的练习。问答论坛提出的解决方案没有一个奏效。代码如下

puts "Type something profound please"
text = gets.chomp
words = text.split

frequencies = Hash.new 0
frequencies = frequencies.sort_by {|x,y| y}
words.each {|word| frequencies[word] += 1}
frequencies = frequencies.sort_by{|x,y| y}.reverse
puts word +" " + frequencies.to_s
frequencies.each do |word, frequencies|   

end
为什么它不能将字符串转换成整数?我做错了什么

很清楚

frequencies.sort_by{x,y | y}
提供一个数组<代码>频率是一个数组,而不是散列。因此,在
words.each{word | frequencies[word]+=1}
中,
frequencies[word]
引发了一个异常,因为
frequencies
是一个数组,数组的元素是通过整数索引访问的,但是您尝试了stringword
words=text.split
,因此
words
保存字符串数组。

很清楚


frequencies.sort_by{x,y | y}
提供一个数组<代码>频率是一个数组,而不是散列。因此,在
words.each{word | frequencies[word]+=1}
中,
frequencies[word]
引发了一个异常,因为
frequencies
是一个数组,数组的元素是通过整数索引访问的,但是您尝试了stringword
words=text.split
,因此
words
保存字符串数组。

我将尝试在这里添加一个具体的示例来帮助您

puts "Type something profound please"
text = gets.chomp
words = text.split
frequencies = {} 
在Ruby中,用{}声明哈希比用hash.new声明哈希更为典型,但两者都有效

words.each do |word|
    if frequencies.has_key?(word)
        frequencies[word] += 1
    else
        frequencies[word] = 1
    end
end
上面简单地迭代单词数组以构建频率散列(hash[key]=value)。它也可以缩写为:

words.each {|word| frequencies.has_key?(word) ? frequencies[word] += 1 : frequencies[word] = 1 }
此外,如果您提供所需的输出/返回值,这也很有帮助。我假设您想要一个word=>integer的散列(如下图所示),但是如果您想要其他格式或排序,这很容易被调整

{
       "my" => 1,
    "array" => 1,
       "of" => 1,
    "words" => 2,
     "with" => 1,
     "some" => 1,
"repeating" => 1
}

在这里,我将尝试添加一个具体的示例来提供帮助

puts "Type something profound please"
text = gets.chomp
words = text.split
frequencies = {} 
在Ruby中,用{}声明哈希比用hash.new声明哈希更为典型,但两者都有效

words.each do |word|
    if frequencies.has_key?(word)
        frequencies[word] += 1
    else
        frequencies[word] = 1
    end
end
上面简单地迭代单词数组以构建频率散列(hash[key]=value)。它也可以缩写为:

words.each {|word| frequencies.has_key?(word) ? frequencies[word] += 1 : frequencies[word] = 1 }
此外,如果您提供所需的输出/返回值,这也很有帮助。我假设您想要一个word=>integer的散列(如下所示),但是如果您想要其他格式或排序,可以很容易地调整它

{
       "my" => 1,
    "array" => 1,
       "of" => 1,
    "words" => 2,
     "with" => 1,
     "some" => 1,
"repeating" => 1
}

不错60秒。好的,我从概念上理解你说的,但我仍然不确定最佳的实际应用。那么,哪一行代码需要更改?我还是不知道该怎么做。不错60秒。好的,我从概念上理解你说的,但我仍然不确定最佳的实际应用。那么,哪一行代码需要更改?我仍然不知道如何实现这一点。你需要显示你的输入数据和预期的输出。我不到一周前才开始使用Ruby。我不知道该怎么做。你能详细说明一下或者再举一个简单的例子来启发我吗?@user3324987我们不知道,你的目标是什么。。所以我让你提出一个新问题,很好。好的,我现在就这样做。当你创建一个问题时,你需要给我们一个输入样本和你期望的输出是什么样子,否则我们必须猜测这两个,这常常让我们和你感到沮丧。你需要显示你的输入数据和期望的输出。我不到一周前才开始使用Ruby。我不知道该怎么做。你能详细说明一下或者再举一个简单的例子来启发我吗?@user3324987我们不知道,你的目标是什么。。所以我让你提出一个新问题,很好。好的,我现在就这么做。当你创建一个问题时,你需要给我们一个输入样本和你期望输出的样子,否则我们不得不猜测这两个,这常常让我们和你感到沮丧。