-1

次のキーと値を使用して、2 つのハッシュを作成hash1しました。hash2

入力:

hash1 = {1=>"One", 2=>"Two", 3=>"Three"}
hash2 = {4=>"First", 5=>"Second", 6=>"Third"}

結果:

hash3そして、私は私に次のような結果を与えることを期待しています

hash3 #=> {1 => "One", 2 => "Two", 3 => "Three", 4 => "First", 5 => "Second", 6 => "Third"}

これら2つのハッシュをマージする方法を誰か教えてもらえますか? hash3すべてのキーとすべての値を含む必要があると仮定します。

4

4 に答える 4

5

Hash#mergeを探しているようです

hash1 = {1=>"One", 2=>"Two", 3=>"Three"}
hash2 = {4=>"First", 5=>"Second", 6=>"Third"}
hash3 = hash1.merge hash2
#=> {1 => "One", 2 => "Two", 3 => "Three", 4 => "First", 5 => "Second", 6 => "Third"}

増加する一連の整数を使用してハッシュにアクセスするという事実を考慮すると、ハッシュの代わりに配列を使用することを検討する必要があります。

result = hash1.values + hash2.values
# => ["One", "Two", "Three", "First", "Second", "Third"]

この方法でも同様に値にアクセスできますが (例: result[2] #=> "Three")、より簡潔なデータ構造が得られます。

于 2013-07-06T19:37:08.107 に答える
3

1 に「first」と「one」の両方を返すようにするには、それらを配列に格納する必要があります。この配列は、1 がマップされる値になります。

results = {}

hash1.each do |key, value|
  if results[key].nil?
    results[key] = [value]
  else
    results[key] << value

hash2.each do |key, value|
  if results[key].nil?
    results[key] = [value]
  else
    results[key] << value

results[1]
=> ["one", "first"]

アップデート

明らかにハッシュは必要ありません。値のみの配列が必要です。

results = hash1.values + hash2.values
=> ["one", "two", "three", "first", "second", "third"]

ハッシュのようにこの配列にアクセスできます。配列のインデックスは 0 であることに注意してください。

results[0]
=> "one"
results[2]
=> "three"
results[5]
=> "third"

更新 2

一意のキーを持っているため、ハッシュが必要になります。そう:

hash3 = hash1.merge(hash2)
于 2013-07-06T19:07:39.250 に答える
2

あなたは新しい言語を学んでいて、物事がどのように機能するかをまだ学んでいるからです。何を扱っているにせよ、開発者向けドキュメントを参照することをお勧めします。

http://ruby-doc.org/

そこから、探しているものを検索し、Ruby が提供する Objects で実行できる他の興味深いことを見つけることができます。

質問に具体的に答えるにはmerge、ハッシュの方法が必要です。

{1: 'One', 2: 'Two', 3: 'Three'}.merge(4: 'Four', 5: 'Five', 6: 'Six)

譲ります{1: 'One', 2: 'Two', 3: 'Three', 4: 'Four', 5: 'Five', 6: 'Six'}

于 2013-07-06T19:48:20.547 に答える