Rubyでセットを保持するための2次元ハッシュを作成したいと思います。次のコードでは、4つの異なるセットを保持し、ハッシュの最初の次元のキーをリストすることができると期待しています。セットや配列を2次元のRubyハッシュにするには?
require 'set'
cities = Hash.new()
cities['Europe'] = Hash.new(Set.new)
cities['Asia'] = Hash.new(Set.new)
cities['Europe']['Sweden'].add "Stockholm"
cities['Europe']['Sweden'].add "Gothenburg"
cities['Europe']['Denmark'].add "Copenhagen"
cities['Europe']['Denmark'].add "Odense"
cities['Asia']['Japan'].add "Tokyo"
cities['Asia']['Japan'].add "Kyoto"
cities['Asia']['China'].add "Beijing"
cities['Asia']['China'].add "Shanghai"
p cities['Europe']
p cities['Asia']
p cities['Europe']['Sweden']
p cities['Asia']['Japan']
私は、次のような出力が得られます。
{}
{}
#<Set: {"Stockholm", "Gothenburg", "Copenhagen", "Odense"}>
#<Set: {"Tokyo", "Kyoto", "Beijing", "Shanghai"}>
ハッシュとセットの実装が互いに干渉し、私は、この直感的な結果を得るように思え。セットの代わりにSet.new
をArray.new
に置き換え、.add
を.push
に置き換えた場合、同じ結果が得られます。
(Rubyのバージョン:ルビー2.3.1p112)
良い努力を私はあなたにもこのような何かを行うことが奇妙だったものの一部は、あなたがキー
ハッシュにセットを割り当てることはなかったと思います、トーマス、しかし、弱点は、大陸と国に都市を追加することです、あなたは国の鍵が存在するかどうかを知る必要があります...私は後で都市[アジア] [' Japan '] '日本のSetがすでに存在するかどうかをテストするコードを書く必要があります。 – SteveTurczyn
True、初期化されたセット 'cities ['Asia'] [" Japan "] = Set.new'で各国を開始し、各国セットに都市を追加することができます。 '都市 '[アジア]] [日本]。add('東京 ')' –
はい、しかしすべての国を事前定義する必要があります。 OPがしようとしているのは、 '' [Europe '] [' Sweden '] 'を参照しているだけで、それがうまくいくと、後でデータ' 'Europe' '[' France ']'自動的に動作します。彼の基本的なテクニックは悪くありませんでしたが、 '都市['Europe'] = Hash.new(Set.new)'が各国が指し示す共通のオブジェクトを作成することを認識していませんでした。国)。 – SteveTurczyn