2016-06-21 145 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