1

これは以下の正解ですが、最後の行に「puts word」と入力しても問題ない理由がわかりませんが、「puts x」と入力することは、ほぼ同じ方法で定義されているため受け入れられません。

puts "Text please "
text = gets.chomp

words = text.split(" ")
frequencies = Hash.new{0}

words.each { |word| frequencies[word] += 1}

frequencies = frequencies.sort_by { |x, y| y }
frequencies.reverse!
frequencies.each do |word, frequency|
    puts word + " " + frequency.to_s
end
4

3 に答える 3

0

プレースホルダーの範囲について混乱していると思います。|word,frequency|のプレースホルダーとして使用する最後の行でfrequencies.each do |word, frequency|は、あなたの|x,y|スコープは最初eachfrequencies = frequencies.sort_by { |x, y| y }

余談ですが、名前|x, y|を特定の名前に変更した方がよいでしょうか? 変数、メソッド、プレースホルダーなどを適切に定義しないと、コードで迷子になる可能性があります。

于 2014-07-18T08:39:13.730 に答える
0

同じように定義されていません。

x は頻度の sort_by ブロックで定義されます。

そこでは定義されていません。

代わりに次のものを入れればうまくいきます:

frequencies.each do |x, y|
    puts x + " " + y.to_s
end

たとえば、x と y は {} の外で定義されていません。または、この場合、do...end

于 2013-11-12T18:58:41.480 に答える