【问题标题】:Adding multiple values to a key in Ruby as well as delete just one value associated向 Ruby 中的键添加多个值以及仅删除一个关联的值
【发布时间】:2022-01-07 08:47:34
【问题描述】:

我想向下面的哈希添加值和删除值

h= {:a =>[ 1,3, 4],
    :b =>[ 3, 6],
    :c =>[ 4, 8, 87]
   }

我如何只删除一个与键有关的值? 删除 c, 87

h= {:a =>[ 1,3, 4],
    :b =>[ 3, 6],
    :c =>[ 4, 8]
   }

我可以在 ruby​​ 中做到这一点吗?我是 ruby​​ 新手,有人可以帮帮我吗?

【问题讨论】:

  • 那些不是有效的 ruby​​ 对象。也许你的意思是{:a => [1,3,4]}?如果是这样,那么h[:c].delete_at(h[:c].index(87)) 就可以了。
  • 甚至h[:c].delete(87),具体取决于您希望如何处理数组中潜在的重复值。
  • 感谢您的帮助。我收到此异常:nil:NilClass 的未定义方法“删除”,两种删除方式均使用 NoMethodError
  • “想像这样添加和删除” – 添加什么,删除什么?另外,请修复您的示例代码。
  • Holger 的代码应该适用于您。听起来您只是键入了错误的键或其他内容。请记住,如果您编写 h[:c].delete(87),您可能会确保 h[:c] 确实存在。

标签: ruby hash


【解决方案1】:

使用零守卫

您需要防止 Hash 中缺少键和值。有很多方法可以做到这一点,但在任何最近的 Ruby 上,&. 运算符可确保方法在 nil 上调用时不会引发异常。以下工作正常:

h = {
  a: [1, 3, 4],
  b: [3, 6],
  c: [4, 8, 87]
}

h[:c]&.delete 87; h
#=> {:a=>[1, 3, 4], :b=>[3, 6], :c=>[4, 8]}

h[:x]&.delete 101; h
#=> {:a=>[1, 3, 4], :b=>[3, 6], :c=>[4, 8]}

【讨论】:

  • 谢谢,托德!我在删除之前检查了键和值是否存在。这是一个更好的方法。
猜你喜欢
  • 1970-01-01
  • 2017-10-11
  • 1970-01-01
  • 2014-04-20
  • 2014-06-05
  • 1970-01-01
  • 2018-10-25
  • 1970-01-01
  • 2011-03-04
相关资源
最近更新 更多