[英]Delete array of keys in 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 }
更新如果您不想迭代键数组,则可以使用Set而不是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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.