
たのしいRuby P252に掲載されていた、例題
「ハッシュ(単語数を数える)」の解説を読んでも
意味が分からなかったので教えてください。
■例題word_count.rb
1:# 単語数のカウント
2:
3: count = Hash.new(0)
4:
5:## 単語の集計
6:while line = gets
7: words = line.split
8: words.each{|word|
9: count[word] += 1
10: }
11:end
12:
13:## 結果の出力
14:count.sort{|a,b|
15: a[1] <=> b[1]
16:}.each{|key, value|
17: print "#{key}: #{value}\n"
18}
■疑問1.
解説には、
# 3行目で出現回数を記録するハッシュcountを作ります。
# countは、キーが単語、値がその単語が出現した回数を表します。
と書かれているのですが、「キーが単語、値がその単語が出現した回数を表します」
の内容が理解できません。newしただけなのに、どうして、
キーと値の内容が決まるのでしょうか?
■疑問2.
解説には、
# 8行目からの繰り返しでは、それぞれの単語をキーにして、countから出現回数を取り出し、
# +1します。
と書かれているのですが、「count[word] += 1」
の内容が理解できません。
作成したハッシュcountと、getsメソッドで読み込み単語単位に分割した配列wordsとが、
どこで関連付けされているのかが、分かりません。
■疑問3.
解説には、
# ruby word_count.rb README
という形で、Rubyに同梱されているREADMEファイルの単語数を調べた
実行結果が掲載されているのですが、
そのときの具体的な処理の流れが分かりません。
「ruby word_count.rb README」と書くだけで、
処理の流れが、getsの所まできたとき、
自動的に指定ファイル名を判断し、
読み込みを始めるということなのでしょうか。
No.1ベストアンサー
- 回答日時:
>と書かれているのですが、「キーが単語、値がその単語が出現した回数を表します」
>の内容が理解できません。newしただけなのに、どうして、
>キーと値の内容が決まるのでしょうか?
別に決まってはいません。
その後のコードで count の key と value をそのように解釈して利用しているということです。
>作成したハッシュcountと、getsメソッドで読み込み単語単位に分割した配列wordsとが、
>どこで関連付けされているのかが、分かりません。
配列 words を一単語ずつ each メソッドで処理することで関連づけています。
Hash.new(0) でデフォルト値が 0 であることに注意しましょう。
>「ruby word_count.rb README」と書くだけで、
> 処理の流れが、getsの所まできたとき、
> 自動的に指定ファイル名を判断し、
> 読み込みを始めるということなのでしょうか。
gets とは ARGF.gets と同じです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
人気Q&Aランキング
-
4
100万件越えCSVから条件を満た...
-
5
VBAマクロで並べ替え操作について
-
6
いまスマホからカードの申込み...
-
7
英数字を含む文字列(0-9,A-Z)...
-
8
言語[ruby]を用いて、エクセル...
-
9
vba formulaの中での変数の扱い
-
10
バッチ処理 特定の文字以降を...
-
11
RubyでCSV.read()で二次元配列...
-
12
ネストされた配列からのCSV出力...
-
13
Beautiful Soupのインストール...
-
14
バーコードのチェックデジット...
-
15
RubyでCSVファイルの1行目を削...
-
16
プログラム実行中に強制停止さ...
-
17
Rubyを使用してcsvファイルを処...
-
18
Rubyプログラムの引数($1)渡し...
-
19
VBA メモ帳の上書き保存がしたい
-
20
Ruby on Railsでボタンをクリッ...
おすすめ情報
公式facebook
公式twitter