次の配列があります:
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か何かでこれを行うためのセクシーなRubyの方法がありますが、私はそれを理解することができませんでした。私はこれを無駄に試しました:
array.select {|k,v| v != "[email protected]"} # => returns array without any changes
私はあなたがこれを探していると思います:
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]" }