Удаление нескольких пар ключ и значение из хэша в Rails - PullRequest
16 голосов
/ 09 сентября 2010
number = {:a => 1, :b => 2, :c => 3, :d => 4}

после оценки определенного состояния я хочу удалить пару ключ-значение a, b, c

Ответы [ 3 ]

17 голосов
/ 09 сентября 2010
number.delete "A"
number.delete "B"
number.delete "C"

Или менее производительно, но более кратко:

number.reject! {|k, v| %w"A B C".include? k }
13 голосов
/ 12 февраля 2013

или более производительно, чем второе решение Криса, но короче первого:

%w"A B C".each{|v| number.delete(v)}
7 голосов
/ 16 мая 2017

ActiveSupport, входящий в состав Rails, поставляется с несколькими встроенными методами, которые могут помочь вам в достижении вашей цели.

Если вы просто хотите удалить несколько пар ключ-значение, вы можете использовать Hash # кроме!

number.except!(:a, :b, :c)

Если вы хотите сохранить оригинальный хеш, используйте Hash #, за исключением

new_hash = number.except!(:a, :b, :c)

new_hash # => {:d=>4}
number # => {:a=>1, :b=>2, :c=>3, :d=>4}

Вы также можете перейти с Rails-free:

new_hash = number.dup.tap do |hash|
  %i[a b c].each {|key| hash.delete(key)}
end

new_hash # => {:d=>4}
number # => {:a=>1, :b=>2, :c=>3, :d=>4}

P.S .: последний пример кода очень медленный, я просто предоставляю его в качестве альтернативы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...