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
Ответы
Ответ 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]" }