2014-09-22 70 views
0

我想知道如何将哈希插入到另一个哈希中。例如,在:如何在哈希红宝石中插入哈希

{"abcd"=>{}, "hgfe"=>34567} 

我想把"hgfe" => 34567"abcd"关键。

输出:

{"abcd"=>{"hgfe" => 34567}} 

IM希望该散列

“##### RUBY HASH ####

(1) INPUT
{ 
    'abcd.hgfe' => 34567, 
    'abcd.efgh.hijk' => 12345, 
    'abcd.efgh.ijkl' => 56789, 
    'wxyz.abcd' => 9876, 
    'wxyz.uvwx.abcd' => 23456, 
} 
(转换1) OUTPUT
{ 
    'abcd' => { 
    'efgh' => { 
     'hijk' => 12345, 
     'ijkl' => 56789 
    }, 
    'hgfe' => 34567, 
    }, 
    'wxyz' => { 
    'abcd' => 9876, 
    'uvwx' => {'abcd' => 23456} 
    } 
} 

我currrent代码:

def method1(hash) 
    result = {} 
    array2 = [] 

    hash.each_pair do|k, v| 
    array1 = k.split('.') 
    count = array1.length 
    hash2 = {} 

    array1.each_with_index do |str, index| 

     if (index + 1) == count 
      hash2[str] = v 
     else 
      hash2[str] = {} 


     end 

    end 

    puts hash2.inspect 
    puts "--------------" 

    end 

    result 

end 


hash_result = method1(h2c) 

回答

3

请执行以下

hash = {"abcd"=>{}, "hgfe"=>34567} 
hash['abcd']['hgfe'] = hash.delete('hgfe') 
hash # => {"abcd"=>{"hgfe"=>34567}} 

您可以编写类似如下:

def delete_key_and_add_to_another_key(hash, update_key, del_key) 
    hash[update_key][del_key] = hash.delete(del_key) 
    hash 
end 

hash = {"abcd"=>{}, "hgfe"=>34567} 
delete_key_and_add_to_another_key(hash, 'abcd', 'hgfe') 
+0

如果有什么的GE neral ...就像它可以是任何键......就像你想每次改变输入一样? – 2014-09-22 07:15:44

+0

@RedondoVelasco包装方法中的逻辑..并使用它。 – 2014-09-22 07:20:43

+0

@RedondoVelasco这就是为什么你应该问*特定*问题。包括您的实际输入和期望的输出,并描述您尝试解决的问题。 – Stefan 2014-09-22 07:22:15

0
h = {"abcd"=>{}, "hgfe"=>34567} 
f, l = h.partition { |_,v| v =={} }.flatten(1) 
{ f.first=> { l.first => l.last } } 
    #=> {"abcd"=>{"hgfe"=>34567}}