2012-11-27 62 views
-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] 
+0

問題不清楚。 arr [1]與結果之間的關係是什麼,特別是將vale1轉換爲value1但不是value2轉換爲value2或value3轉換爲value3的規則是什麼? – sawa

回答

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"} 

請注意,這種結構實際上哈希值,而不是陣列。

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) 
3
h_arr.merge!(Hash[*arr[1].split(/[=|]/)]) 

請注意,我假設h_arr實際上被定義爲就像下面一個Hash(而不是你的語法,計算給定哈希的單個項目組成的數組):

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

如果您的語法確實正確,則合併到h_arr[0]而不是h_arr