【发布时间】:2011-08-10 10:09:31
【问题描述】:
Ruby 似乎是一种特别适合解决这个问题的语言,但我没有找到一种优雅的方法来解决这个问题。我想要的是一种接受一个值并将其添加到哈希中的方法,如果密钥已经存在,则对如何添加它有特定要求:
将 'foo' 添加到 :key1
{:key1 => 'foo'}
将'bar'添加到:key1
{:key1=> 'foobar'}
将 ['foo'] 添加到 :key2
{:key2 = ['foo']}
将 ['bar'] 添加到 :key2
{:key2 => [['foo'], ['bar']]
将 {:k1 => 'foo'} 添加到 :key3
{:key3 => {:k1 => 'foo'}}
将 {:k2 => 'bar'} 添加到 :key3
{:key3 => {:k1 => 'foo', :k2 => 'bar'}}
现在我可以做到这一点,但它看起来很草率,不像惯用的 Ruby。有什么好的方法可以做到这一点?
【问题讨论】:
-
不是我完全确定你在这里要做什么,但为什么数组部分不是
{:key2 => ['foo', 'bar']}? -
如果你刚刚在 Hash 上定义了#+ 来做#merge,你就可以使用它。定义添加(h,k,v); h[k] ? h[k] += v : h[k] = v;结束
-
这不是一个很好的例子,但我只是表明它必须是一个数组数组。
标签: ruby-on-rails ruby