-1

Rubyでは、配列要素があるとしましょう

arr[1] = "key1=vale1|key2=value2|key3=value3".

今、hstoreデータを含む別の配列があります。

h_arr=[hkey1=>hvalue1, hkey2=>hvalue2]

arr[1]要素を追加しh_arrて、このような結果を得るにはどうすればよいですか

h_arr=[hkey1=>hvalue1, hkey2=>hvalue2, key1=>value1, key2 => value2, key3 => value3]
4

3 に答える 3

3
h_arr.merge!(Hash[*arr[1].split(/[=|]/)])

h_arr実際には以下のような単なるハッシュとして定義されていると想定していることに注意してください(指定されたハッシュの単一項目の配列に評価される構文とは対照的に):

h_arr = {hkey1=>hvalue1, hkey2=>hvalue2}

構文が本当に正しかった場合は、h_arr[0]代わりに にマージしh_arrます。

于 2012-11-27T00:31:35.230 に答える
2

あなたはこれを試すことができます:

str = "key1=vale1|key2=value2|key3=value3"
h_arr = {'hkey1'=>'hvalue1', 'hkey2'=>'hvalue2'}

h1 = str.split('|').inject({}) {|f,c| f.update Hash[*c.split('=')] }

final = h_arr.merge(h1)

p final

#=> {"hkey1"=>"hvalue1", "hkey2"=>"hvalue2", "key1"=>"vale1", "key2"=>"value2", "key3"=>"value3"}

この種の構造は、実際には配列ではなくハッシュであることに注意してください。

于 2012-11-27T00:25:03.907 に答える
0

yamlデータのシリアル化/逆シリアル化に使用することをお勧めします。次のようなことを試してください:

require "yaml"

# starting hash
hash = {:key1 => "value1", :key2 => "value2", :key3 => "value3"}

# create serial from hash
serial = hash.to_yaml

# show serial
puts serial
#=> --- 
#=> :key3: value3
#=> :key1: value1
#=> :key2: value2

# load hash from serialized string
new_hash = YAML.load(serial)

# show new hash
puts new_hash.inspect
#=> {:key3=>"value3", :key1=>"value1", :key2=>"value2"}

Ruby で通常のハッシュ オブジェクトを作成したらHash#merge、それらを組み合わせて使用​​するのは簡単です。

# voilà
hash1.merge(hash2)
于 2012-11-27T00:30:30.253 に答える