Well I tried to reply but my email was deleted. Long story short, successive Map.put calls are actually inferior to walking intermediary lists and building a new map at the end. You can read more about it here: https://github.com/elixir-lang/elixir/pull/4415
You'll note that Map.take is actually built in just that way: https://github.com/elixir-lang/elixir/blob/master/lib/elixir/lib/map.ex#L330 On Saturday, June 18, 2016 at 4:49:04 PM UTC-4, Filip Haglund wrote: > > 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 elixir-lang-core+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/elixir-lang-core/58c89485-0334-45ca-95f9-2a519060fc41%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.