删除Ruby Hash中的键数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了删除Ruby Hash中的键数组相关的知识,希望对你有一定的参考价值。

我将如何去删除哈希中的键数组?例如,你可以调用。

hash.delete(some_key)

但是我怎么才能做到这一点呢?

hash.delete([key1,key2,key3,...])

而不需要手动循环。

答案

你可以迭代一个键的数组并删除其中的每一个键。

[key1, key2, key3].each { |k| some_hash.delete k }

我不记得有什么更好的解决方案了

另一答案

这正是你要找的......你可以这样做,而不需要在数组中进行不必要的循环。

keys_to_delete = [key1, key2, key3]
hash_array.except!(*keys_to_delete)

结果存储在hash_array中。

另一答案

你可以尝试使用 Hash#delete_if:

delete_if 从 hsh 中删除块值为 true 的每一个键值对。

array_hash.delete_if { |key, _| [key1, key2, key3].include? key }

更新如果你不想遍历键数组,你可以使用 设置 而不是 Array (自 Set 用途 Hash 作为存储 include? 是O(1))。

require 'set'
keys = [key1,key2,key3].to_set
array_hash.delete_if { |key, _| keys.include? key }
另一答案

也许值得制定一个方法

class Hash
  def delete_by_keys *keys
    keys.each{|k| delete(k)}
  end
end

hash_array.delete_by_keys(key1,key2,..)
另一答案

ActiveSupport(Rails的一部分)正是实现了这一点,如Hash#except和Hash#except!

def except!(*keys)
    keys.each { |key| delete(key) }
    self
end

参见 http:/apidock.comrailsv4.0.2Hashexcept%21。

以上是关于删除Ruby Hash中的键数组的主要内容,如果未能解决你的问题,请参考以下文章

雷林鹏分享:Ruby 哈希(Hash)

元素替换 - 红宝石

在哈希的键数组中追加元素

如何检查我的哈希是否有来自字符串数组的键?

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

从数组 ruby​​ 生成哈希键和值