Rubyのハッシュについて質問です。

PHPでは以下のような連想配列に初期化なしでいきなり代入できますが、
Rubyではどのように書きますか?
ハッシュの宣言方法から代入までを書いてください。

<?php

$hash[5]['color']['white'] = "#ffffff";

?>

回答の条件
  • URL必須
  • 1人2回まで
  • 13歳以上
  • 登録:2010/10/10 02:03:16
  • 終了:2010/10/17 02:05:03

ベストアンサー

id:iwadon No.1

いわどん回答回数60ベストアンサー獲得回数132010/10/10 06:02:15

ポイント35pt

私も知りませんでしたので調べてみましたが、以下の方法がわかりやすかったです。

def recursive_hash
  Hash.new {|h, k| h[k] = recursive_hash}
end
hash = recursive_hash
hash[5]['color']['white'] = "#ffffff"
p hash # => {5=>{"color"=>{"white"=>"#ffffff"}}}

この方法はStack Overflowというサイトで紹介されていました。

http://stackoverflow.com/questions/3356002/nested-hash-defined

id:is0me

解決できました、ありがとうございます。

2010/10/10 12:16:27

その他の回答(1件)

id:iwadon No.1

いわどん回答回数60ベストアンサー獲得回数132010/10/10 06:02:15ここでベストアンサー

ポイント35pt

私も知りませんでしたので調べてみましたが、以下の方法がわかりやすかったです。

def recursive_hash
  Hash.new {|h, k| h[k] = recursive_hash}
end
hash = recursive_hash
hash[5]['color']['white'] = "#ffffff"
p hash # => {5=>{"color"=>{"white"=>"#ffffff"}}}

この方法はStack Overflowというサイトで紹介されていました。

http://stackoverflow.com/questions/3356002/nested-hash-defined

id:is0me

解決できました、ありがとうございます。

2010/10/10 12:16:27
id:a-kuma3 No.2

a-kuma3回答回数4559ベストアンサー獲得回数19032010/10/10 09:26:40

ポイント35pt

無理やり、連想配列っぽくするなら、↓みたいな感じかな。

class NestedHash < Hash
    def [] (k)
        unless has_key? (k)
            self[k] = NestedHash.new
        end
        v = super(k)
    end
end

hash = NestedHash.new


hash[5]['color']['white'] = "#ffffff"

質問の題意と外れるかもしれないけど、定義を持つテーブルを作りたいのなら、入れ子の連想配列を

使うよりも、もっといい方法があると思うな。

http://www.ruby-lang.org/ja/

id:is0me

ありがとうございます。

やり方はいろいろありますね。

2010/10/10 12:16:30

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません