ruby - 如何将值附加到 ruby​​ hashtag 中的键

标签 ruby hash

我想将多个值附加到 ruby​​ 哈希中的同一个键。一直在用

    tags.merge!({'xyz': 'abc'})

向散列添加新标签,但是还没有找到向同一个键添加多个值的方法。

例如:

  tags = {'square': 'blue', 'rectangle': 'green, 'circle': 'yellow'}

我想为形状添加另一种颜色,使其看起来像:

  tags = {'square': 'blue', 'rectangle': 'green, 'circle': ['yellow','red']}

我该怎么做?

最佳答案

您可以将 block 传递给 merge并使用合并到重复键中的值做你想做的事:

tags = {square: 'blue', rectangle: 'green', circle: 'yellow'}
tags.merge!({ circle: 'red', square: 'red' }) do |key, oldval, newval|
  if key == :circle
    # Change to array and add the new value
    (oldval.is_a?(Array) ? oldval : [oldval]) << newval
  else
    # Acts like default
    newval
  end
end

# => {:square=>"red", :rectangle=>"green", :circle=>["yellow", "red"]}

但是如果:circle是一个数组甚至只有一个元素会更好。

关于ruby - 如何将值附加到 ruby​​ hashtag 中的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32701621/

相关文章:

hash - 内部哈希和外部哈希之间的区别

java - OpenJDK的rehashing机制

perl - Perl 中散列键的子集

ruby-on-rails - [0, 0] :Array <NoMethodError> 的未定义方法 '<'

ruby-on-rails - 使用 Active Admin 时无法更新或删除

ruby - 正则表达式和字符串

passwords - 是否值得在客户端对密码进行哈希处理

sql - 查询中的 Postgres/Rails 复数问题

ruby-on-rails - 使用命名空间部署时出现 Capistrano 错误

C# Hash SHA256Managed 不等于 TSQL SHA2_256