-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 回答