![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
No.2ベストアンサー
- 回答日時:
たく面倒くせえなあ(笑)
何もせずに
hash{$key1}{$key2}=$value;
のような感じで
h[key1][key2]=val
ができないのをどうにかしたい、って書いてくれれば
ちゃんとそうやったのに。
h = Hash.new{|hash, key| hash[key] = {} }
while line = DATA.gets
key1,key2,val = line.split(/\s*,\s*/)
h[key1][key2]=val unless (key1.nil? or key2.nil? or val.nil?)
end
h.keys.each do |key1|
h[key1].keys.each do |key2|
puts "h[#{key1}][#{key2}]=#{h[key1][key2]}"
end
end
__END__
1,1,1
2,3,6
4,4,16
9,9,81
-------
h[1][1]=1
h[2][3]=6
h[4][4]=16
h[9][9]=81
これでいいですか?
この回答への補足
毎度、お世話になります。
切り取って実行してみると、以下エラーになってしまいます。
undefined method `[]=' for nil (NameError)
あと、一行目のところが理解できません。
h = Hash.new{|hash, key| hash[key] = {} }
の『= {} 』の意味を説明して頂けませんか?
No.3
- 回答日時:
んー実行して結果を確かめてから書き込みしたんで
エラーが出るのは納得できないなあ。
C:\Users\>ruby190 -v moge.rb
ruby 1.9.0 (2007-11-05 patchlevel 0) [i386-mswin32_71]
mogera.rb:7: warning: shadowing outer local variable - key1
mogera.rb:8: warning: shadowing outer local variable - key2
h[1][1]=1
h[2][3]=6
h[4][4]=16
h[9][9]=81
C:\Users\>ruby186 -v moge.rb
ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32]
h[9][9]=81
h[1][1]=1
h[2][3]=6
h[4][4]=16
ご覧の通りエラーのえの字もありません。
> h = Hash.new{|hash, key| hash[key] = {} }
> の『= {} 』の意味を説明して頂けませんか?
これは空の無名ハッシュです。
変数を空の配列として初期化するときに
v = []
のようにできますが、それのハッシュ版です。
全体としてハッシュの初期化なので、= Hash.key }
のようにもう一回 Hash.new とかくのがいやだったので
そうしています。
この回答への補足
ruby 1.6.1を使用してた為みたいです。
ruby 1.8.6 に乗り換えたらエラーなしでした。
お騒がせしました。
因みに、キーが3つだったら、以下の様に書くんですね?
h = Hash.new{|hash, key| hash[key] =Hash.new{|hash, key| hash[key]={}} }
#perlの方が楽だと思ってしまいます。
No.1
- 回答日時:
Perlの例に合わせるならこんな感じでしょうか
h = Hash.new
h['foo'] = Hash.new
h['bar'] = Hash.new
h['baz'] = Hash.new
h['foo']['xx'] = 1
h['foo']['yy'] = 2
h['bar']['zz'] = 3
h['bar']['aa'] = 4
h['baz']['bb'] = 5
h['baz']['cc'] = 6
h.keys.each do |key1|
h[key1].keys.each do |key2|
puts h[key1][key2]
end
end
この回答への補足
回答ありがとうございます。
ご回答頂いた例ですと、第一キーとなるfoo.bar,bazを予め知ってるって感じじゃないですか。
while line = DATA.gets
key1,key2,val = line.split(/\s*,\s*/)
h[key1][key2]=val
end
__END__
1,1,1
2,3,6
4,4,16
9,9,81
上記の様に書きたく、データのキーのバリエーションが変わっても対応できるようにしたいです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- JavaScript Json のキーと値の出力の違いについて 2 2022/06/14 20:22
- CPU・メモリ・マザーボード USB Key 2 2022/07/06 14:25
- Visual Basic(VBA) エクセルVBAについて 8 2022/07/13 22:41
- その他(プログラミング・Web制作) pythonにおける単方向リストの実装について 4 2022/07/13 12:34
- Visual Basic(VBA) ExcelVBAで、index、match関数を使用して、指定範囲に出力したい 3 2022/10/18 21:53
- Visual Basic(VBA) シフト表のコマで「ブロック」されている前の時間の「出」を同一列の「休」と入れ替えたいがふぇきません。 2 2023/08/02 18:49
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- JavaScript SQLでデータベースから返ったデータのJSON形式生成について 1 2022/04/06 12:25
- MySQL エラー 1068 (42000): 複数の主キーが定義されていますエラー 2 2022/11/17 04:36
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラマーは誘惑にさらされ...
-
プログラミングの雑談がしたい...
-
趣味レベルでプログラミングを...
-
Kotlin言語について。
-
インターフェースとトレイトっ...
-
paiza python03 ランクC獲得
-
マイクロソフトがvbを捨てたの...
-
プログラムについて。
-
python 機械学習 文字画像認識
-
soucetreeでローカルのクローン...
-
プログラム言語について。
-
Google ColaboでGUI作成
-
独自ドメインのHPを編集するに...
-
プログラミング初心者です。 Wi...
-
batファイル、コマンドプロンプ...
-
P2P地震速報のEEW APIの仕様書...
-
python03について。
-
vba クリップボードクリアにつ...
-
バッチファイルについて
-
Arduinoに関する質問
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
重複確認
-
foreachで上限回数指定方法また...
-
マッチング処理(1:N)
-
Excel VBAでフィルター後の対象...
-
VB.NET で 二次元のハッシュは...
-
多次元配列を、1次元の配列にす...
-
SELECT 使用時の bindValue の...
-
Smartyでインクリメント
-
PHPでこのコード自体に意味は無...
-
PHP、{}記号の意味
-
配列を比較して同じものがあっ...
-
phpでforeachの中にforeachがあ...
-
多次元配列の中で条件に合う要...
-
sqlのデーターを『あ行』『か行...
-
ラジオボタンをランダムに表示...
-
キーが倍数の時の値の存在チェ...
-
三重県南部の温泉
-
foreachで配列を、左から縦3列...
-
ジャグ配列
-
構造体の中でユーザー定義型の...
おすすめ情報