###前提・実現したいこと
RubyでHashを使用してユニークなIDと単語をセットで辞書登録するプログラムを読んでいます。
以下の記述(*)が何をしているのかよくわかりません。
そもそもHashのデータがどのように保持されているのかもよくわかっていません。
本など読みましたが、図などで書いてあるものがなかなか見つけられず想像がついていません。
Hashの仕組みを教えてください。
今回で言う"id = wordId[d[0]]"の箇所は何をidに入れているのですか?
HashのデータはIDと単語の2つを持っているのではないのですか?
また、このプログラムが既出の単語は飛ばしてIDをつけるものだということはわかっているのですが、
どの部分で判断しているのかがわかりません。
初心者ですので基礎知識すら足らないのはわかっていますが、どうぞよろしくお願いいたします。
###ソースコード
Ruby
1def makeDictionary(fileMcb) #単語とIDを辞書登録 2 number = 0 3 wordId = Hash.new #ローカル変数 4 File.open(fileMcb){|fin| 5 fin.each{|line| 6 d = line.chomp.split(/\t/) 7 next if d.size == 1 8 id = wordId[d[0]] …(*) 9 10 if id.nil? 11 wordId[d[0]] = number 12 number +=1 13 end 14 p id 15 } 16 } 17 return wordId 18 end
###試したこと
動作がわからない箇所にpを入れていちいち表示させようとしましたが、(*)の真下に入れてもエラーか何かで表示されませんでした。
eachの外にp idとしたら「nil nil nil nil nil nil 6 nil ...」といった具合に表示されましたが、更に動作がよくわからなくなりました。
###補足情報(言語/FW/ツール等のバージョンなど)
入力ファイルはMecabに通したタブ区切りファイルを想定しています。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。