I have the following array:
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]"}]
I have a list of "blacklist" emails, for instance:
blacklist = ["[email protected]"]
I want to do something like this:
array - blacklist
# => should remove element {"email"=>"[email protected]", "name"=>"Test C"}
Surely there is a sexy-Ruby way to do this with .select or something, but I haven't been able to figure it out. I tried this to no avail:
array.select {|k,v| v != "[email protected]"} # => returns array without any changes
I think you're looking for this:
filtered_array = array.reject { |h| blacklist.include? h['email'] }
or if you want to use select
instead of reject
(perhaps you don't want to hurt anyone's feelings):
filtered_array = array.select { |h| !blacklist.include? h['email'] }
Your
array.select {|k,v| ...
attempt won't work because array hands the Enumerable blocks a single element and that element will be a Hash in this case, the |k,v|
trick would work if array
had two element arrays as elements though.
How about
array.delete_if {|key, value| value == "[email protected]" }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With