向 Ruby 中的键添加多个值以及仅删除一个关联的值

Posted

技术标签:

【中文标题】向 Ruby 中的键添加多个值以及仅删除一个关联的值【英文标题】:Adding multiple values to a key in Ruby as well as delete just one value associated 【发布时间】: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] 确实存在。 【参考方案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]

【讨论】:

谢谢,托德!我在删除之前检查了键和值是否存在。这是一个更好的方法。

以上是关于向 Ruby 中的键添加多个值以及仅删除一个关联的值的主要内容,如果未能解决你的问题,请参考以下文章

如何根据字典中的键值逐行向熊猫数据框添加值?

PHP关联数组重复键

向PYTHON列表中的键添加值

Java 集合快速失败异常

删除Ruby Hash中的键数组

学习python第六天-字典学习