Here's another implementation, using Enum.reduce, without an intermediate 
list: 

def map_filter_values(map, func) do
  Enum.reduce map, %{}, fn {key, val}, acc ->
    if func.(val) do
      Map.put(acc, key, val)
    else
      acc
    end
  end
end


On Saturday, June 18, 2016 at 6:27:07 PM UTC+2, Filip Haglund wrote:
>
> I wish there was a Map.filter_values function that would filter on keys or 
> values, but leave the other one intact. This seems like something that 
> should be in the standard library.
>
> Example implementation of a Map.filter_values that would filter a map 
> based on its values, leaving the keys intact:
>
> @doc """
> Filter map based on its values, leaving the corresponding keys intact.
> """
> @spec map_filter_values(Map.t, (any -> boolean)) :: Map.t
> def map_filter_values(map, func) do
>   map |> Enum.filter(fn {_, val} -> func.(val) end) |> Map.new
> end
>
>
>
> A corresponding Map.filter_keys would also be nice.
>

-- 
You received this message because you are subscribed to the Google Groups 
"elixir-lang-core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/elixir-lang-core/e84587f2-5d0d-4b02-9295-d088926c6912%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to