たのしい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で質問しましょう!
似たような質問が見つかりました
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- 英語 ソシュール言語観による品詞、単語、辞書理解の誤り 4 2022/11/24 12:27
- C言語・C++・C# [至急]Project Euler:#17Number letter countsコード入力出力解説 2 2022/09/24 02:46
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- 教えて!goo 【回答が書きにくいのはなぜ】投稿内容に不適切な表現など・(中略)・投稿内容の修正をお願いいたします 9 2023/05/09 08:41
- Visual Basic(VBA) 1つの入力フォルダの値を読み込み、3分割をして新しい変数に代入する方法を教えていただきたいです。 読 4 2022/10/17 20:52
- 英語 1単語及び2単語の「no~」を受ける単語について 1 2022/11/07 11:54
- 日本語 なぜこの単語にこれとこの意味があるの?というもの 7 2023/08/25 12:44
- Visual Basic(VBA) Sheet「状況」から、分類の年齢別カウント数をSheet「D表」へ転記する下記マクロを作っています 7 2022/12/14 17:57
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ビーリアルのユーザー名を変え...
-
Accessで文字列のバイト数読み込み
-
pythonエラー
-
初心者プログラミング
-
英数字を含む文字列(0-9,A-Z)...
-
文字コードのエラー
-
WinSCPで画像のように puttyを...
-
パソコンのスクリーンセーバー...
-
pandasでsqlite3にテーブル作成...
-
プログラミングについてです。...
-
c言語 プログラミング 等比数列...
-
VBScriptでExcel(2019)上のデー...
-
バーチャルボックスが使えなく...
-
なんで if __name__ == "__main__"
-
クリスタルレポートで困ってい...
-
パイソンのクラスについて
-
VBA
-
教えてください
-
パイソンエラーについて
-
パイソンプログラミング
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【BrowseForFolderでデスクトッ...
-
ぱいソン
-
Rubyの超初心者です。「戻り値r...
-
Access2000にExcel2000のデータ...
-
レコードセットオブジェクトの...
-
VBA ブックに名前をつけて保存
-
CloseとQuitについて
-
python return 関数
-
get() と find() の違いについて
-
パイソンのクラス
-
「arg」は何の略?
-
No route matches [GET] "/post...
-
A1の値をファイル名に指定した...
-
エクセルVBA オートフィルタで...
-
Rubyについて質問です
-
エラー「メソッドまたはデータ...
-
VBAで型が一致しないエラー(バ...
-
教えてください。vb5.0
-
Csvファイルの最終行を取得する...
-
クラス名やモジュール名の競合...
おすすめ情報