在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]
答案 0 :(得分:3)
h_arr.merge!(Hash[*arr[1].split(/[=|]/)])
请注意,我假设h_arr
实际上只是像下面的Hash一样被定义(而不是你的语法,它的计算结果是给定哈希的单个项目的数组):
h_arr = {hkey1=>hvalue1, hkey2=>hvalue2}
如果您的语法确实正确,请合并到h_arr[0]
而不是h_arr
。
答案 1 :(得分: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"}
请注意,这种结构实际上是哈希,而不是阵列。
答案 2 :(得分: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)