1

文字列の単語頻度をキーとして、頻度を値として格納しているハッシュが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

ハッシュイテレータがランダムな順序でハッシュを返すことを読みましたが、これは今のところ機能しているようです。

ここで、最も頻繁に使用される20個の単語のみを含むようにハッシュを頻度設定する必要があります。これどうやってするの?読んでくれてありがとう。

4

1 に答える 1

4

おそらくお分かりのように、ソートされたままになる理由は、への呼び出しがをにEnumerable#sort_by変更するHashためArrayです。そのメソッドのドキュメントから:

sort_byの現在の実装は、元のコレクション要素とマップされた値を含むタプルの配列を生成します。

ソートされた配列を取得したら、それを使用Array#firstして上位20を取得できます。

top20 = freqs.first(20)

to_hash必要に応じて、結果を使用して結果をに戻すことができますがHash、ソートされなくなります。

于 2010-08-31T01:33:49.880 に答える