解析数组元素并添加到哈希

时间:2012-11-27 00:14:52

标签: ruby

在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]

3 个答案:

答案 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)