Подтвердить что ты не робот

Rails: удалить элемент из массива хэшей

У меня есть следующий массив:

 array = [{"email"=>"[email protected]", "name"=>"Test"},
          {"email"=>"[email protected]", "name"=>"Test A"},
          {"name"=>"Test B", "email"=>"[email protected]"},
          {"email"=>"[email protected]", "name"=>"Test C"},
          {"name"=>"Test D", "email"=>"[email protected]"},
          {"email"=>"[email protected]"},
          {"name"=>"Test F", "email"=>"[email protected]"}]

У меня есть список "черных списков", например:

 blacklist = ["[email protected]"]

Я хочу сделать что-то вроде этого:

 array - blacklist 
 # => should remove element {"email"=>"[email protected]", "name"=>"Test C"} 

Конечно, есть сексуально-рубиновый способ сделать это с помощью .select или что-то еще, но я не смог понять это. Я пробовал это безрезультатно:

 array.select {|k,v| v != "[email protected]"} # => returns array without any changes
4b9b3361

Ответ 1

Я думаю, вы ищете это:

filtered_array = array.reject { |h| blacklist.include? h['email'] }

или если вы хотите использовать select вместо reject (возможно, я хочу причинить кому-либо вред):

filtered_array = array.select { |h| !blacklist.include? h['email'] }

Ваш

array.select {|k,v| ...

попытка не будет работать, потому что массив передает Enumerable блокирует один элемент, и этот элемент будет хешем в этом случае, трюк |k,v| будет работать, если array имеет два элемента массива в качестве элементов.

Ответ 2

Как насчет

array.delete_if {|key, value| value == "[email protected]" }