向 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 中的键添加多个值以及仅删除一个关联的值的主要内容,如果未能解决你的问题,请参考以下文章