回答:
ハッシュがある場合は、キーで参照して項目を追加できます。
hash = { }
hash[:a] = 'a'
hash[:a]
# => 'a'
ここで[ ]
は、空の配列{ }
を作成するように、空のハッシュを作成します。
配列には、特定の順序で0個以上の要素があり、要素が重複する場合があります。ハッシュには0個以上の要素がkeyで編成されています。キーは複製できませんが、それらの位置に格納されている値は重複できます。
Rubyのハッシュは非常に柔軟で、投げることができるほとんどすべてのタイプのキーを持つことができます。これにより、他の言語で見られる辞書構造とは異なります。
ハッシュのキーの特定の性質がしばしば重要であることを覚えておくことが重要です:
hash = { :a => 'a' }
# Fetch with Symbol :a finds the right value
hash[:a]
# => 'a'
# Fetch with the String 'a' finds nothing
hash['a']
# => nil
# Assignment with the key :b adds a new entry
hash[:b] = 'Bee'
# This is then available immediately
hash[:b]
# => "Bee"
# The hash now contains both keys
hash
# => { :a => 'a', :b => 'Bee' }
Ruby on Railsは、HashWithIndifferentAccessを提供して、SymbolメソッドとStringメソッドのアドレッシングを自由に変換できるようにすることで、これを多少混乱させています。
また、クラス、数値、その他のハッシュなど、ほぼすべてのインデックスを作成できます。
hash = { Object => true, Hash => false }
hash[Object]
# => true
hash[Hash]
# => false
hash[Array]
# => nil
ハッシュは配列に変換でき、その逆も可能です。
# Like many things, Hash supports .to_a
{ :a => 'a' }.to_a
# => [[:a, "a"]]
# Hash also has a handy Hash[] method to create new hashes from arrays
Hash[[[:a, "a"]]]
# => {:a=>"a"}
ハッシュへの "挿入"に関しては、一度に1つずつ行うか、またはmerge
メソッドを使用してハッシュを結合します。
{ :a => 'a' }.merge(:b => 'b')
# {:a=>'a',:b=>'b'}
これは元のハッシュを変更せず、代わりに新しいハッシュを返すことに注意してください。あるハッシュを別のハッシュに結合したい場合は、次のmerge!
メソッドを使用できます。
hash = { :a => 'a' }
# Returns the result of hash combined with a new hash, but does not alter
# the original hash.
hash.merge(:b => 'b')
# => {:a=>'a',:b=>'b'}
# Nothing has been altered in the original
hash
# => {:a=>'a'}
# Combine the two hashes and store the result in the original
hash.merge!(:b => 'b')
# => {:a=>'a',:b=>'b'}
# Hash has now been altered
hash
# => {:a=>'a',:b=>'b'}
StringおよびArrayの多くのメソッドと同様に、!
はそれがインプレース操作であることを示します。
hash = { a: 'a', b: 'b' }
=> {:a=>"a", :b=>"b"}
hash.merge({ c: 'c', d: 'd' })
=> {:a=>"a", :b=>"b", :c=>"c", :d=>"d"}
マージされた値を返します。
hash
=> {:a=>"a", :b=>"b"}
ただし、呼び出し元オブジェクトは変更しません
hash = hash.merge({ c: 'c', d: 'd' })
=> {:a=>"a", :b=>"b", :c=>"c", :d=>"d"}
hash
=> {:a=>"a", :b=>"b", :c=>"c", :d=>"d"}
再割り当てはトリックを行います。
hash {}
hash[:a] = 'a'
hash[:b] = 'b'
hash = {:a => 'a' , :b = > b}
ユーザー入力からキーと値を取得する場合があるため、Rubyを使用できます。.to_sym は文字列をシンボルに変換でき、.to_iは文字列を整数に変換します。
例えば:
movies ={}
movie = gets.chomp
rating = gets.chomp
movies[movie.to_sym] = rating.to_int
# movie will convert to a symbol as a key in our hash, and
# rating will be an integer as a value.
Ruby 2.0以降で使用できるdouble splat演算子を使用できます。
h = { a: 1, b: 2 }
h = { **h, c: 3 }
p h
# => {:a=>1, :b=>2, :c=>3}