我如何删除散列中的键数组?例如,您可以致电:
hash_array.delete(some_key)
Run Code Online (Sandbox Code Playgroud)
但是我该怎么做呢:
hash_array.delete([key1,key2,key3,...])
Run Code Online (Sandbox Code Playgroud)
不必要地循环遍历阵列.
KL-*_*L-7 16
您可以迭代一组键并删除其中的每个键:
[key1, key2, key3].each { |k| some_hash.delete k }
Run Code Online (Sandbox Code Playgroud)
不记得任何更好的解决方案.
the*_*raw 12
这正是你正在寻找的......你可以这样做而不必不必要地遍历数组.
keys_to_delete = [key1, key2, key3]
hash_array.except!(*keys_to_delete)
Run Code Online (Sandbox Code Playgroud)
结果存储在hash_array中
Ali*_*kau 11
您可以尝试使用Hash#delete_if:
delete_if删除hsh中的每个键值对,其中块的计算结果为true.
array_hash.delete_if { |key, _| [key1, key2, key3].include? key }
Run Code Online (Sandbox Code Playgroud)
UPDATE
如果你不想遍历键的数组,你可以使用设置的,而不是Array(因为Set使用Hash作为存储include?为O(1)):
require 'set'
keys = [key1,key2,key3].to_set
array_hash.delete_if { |key, _| keys.include? key }
Run Code Online (Sandbox Code Playgroud)