2016-06-21 192 views
0

我的哈希值是:合併哈希鍵

hash = { text:'abc', text1:'123', other values } 

我想有:

{ text: 'abc123', other values }

我該如何合併兩個按鍵爲單一(僅text+text1應該合併)?

+0

此在哈希唯一的值或者這只是一個例子嗎?可能還有其他的鍵(比如說:'foo'和'foo1',也許還有'foo2')? – spickermann

+0

你們,這只是個例子,還有其他的價值 – user

+0

鑰匙背後的模式是什麼?它總是一個字符的組合(如'foobar'),其他鍵以相同的組合開始,但以數字結尾(如'foobar9346')?加入時應如何訂購這些值? – spickermann

回答

5

您可以使用Object#tap爲你的目標:

hash.tap { |h| h[:text] += h.delete(:text1) } 
=> {:text=>"abc123", other_values} 
+0

由於'delete'返回您可能只想使用'h [:text] = h [:text] + h.delete(:text1)'刪除的值'並刪除以下行。 – spickermann

+0

@spickermann,當然,謝謝 – Ilya

+0

爲什麼你需要點擊一個數組而不是僅僅修改一個字符串值? – mudasobwa

6
hash[:text] << hash.delete(:text1) 
+0

尼特和清潔解決方案 –

+1

@Gagan,我不確定「尼特」,但它肯定是乾淨的。 Mudsie,好的! 'h = hash.dup; h [:text] << h.delete(:text1)'如果'hash'不會被突變。 –

+0

@CarySwoveland如果散列不會被突變,那麼帶有'hash.dup.tap'的解決方案似乎更合適:它將返回散列本身,並且它不需要臨時局部變量。 – mudasobwa