2011-03-09 99 views
0
hash = { 
    "key1_sub1" => [0, 1, 2], 
    "key2_sub2" => [1, 12], 
    "key3_sub1" => [4, 5, 6] 
} 

一個新的哈希是有一個襯墊會還給我一個新的哈希構建具有不同的密鑰

它找到哈希值匹配原散列鑰匙圖案「_sub1」,通過構建新的密鑰刪除 「_sub1」

new_hash = { "key1" => [0, 1, 2], "key3" => [4, 5, 6] } 

回答

2
hash.each_with_object({}){|(k, v), h| h[k.sub(/_sub1/, '')] = v if k[/_sub1/]} 
+0

使用模式「_sub1」,我只想得到2個匹配,「key1_sub1」和「key2_sub1」,我不想要「key2_sub2」。最終結果應該是{「key1」=> [0,1,2],「key3」=> [4,5,6]} not {「key1」=> [0,1,2],「key2_sub2」 => [1,12],「key3」=> [4,5,6]} – user612308 2011-03-09 23:54:57

+0

我編輯它。這與肖恩的答案類似。 – sawa 2011-03-10 00:08:35

+0

我正在刪除我的...你的更好,我扯掉了大部分。 :-) +1爲好答案。 – 2011-03-10 00:14:05

1

這應該工作:

new_hash = Hash[*hash.keys.map{ |x| x.gusb /_sub\d$/, '' }.zip(hash.values)]

相關問題