Как бы я удалил массив ключей в хэше?Например, вы можете позвонить:
hash_array.delete(some_key)
Но как я могу это сделать:
hash_array.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 }
UPDATE Если вы не хотите перебирать массив ключей, вы можете использовать Установить вместо Array (поскольку Set использует Hash в качестве хранилища include? равно O (1)):
Array
Set
Hash
include?
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 # кроме и Hash # кроме!
def except!(*keys) keys.each { |key| delete(key) } self end
См. http://apidock.com/rails/v4.0.2/Hash/except%21