I have used the pattern this code wraps often and would use this feature if it existed. Allen Madsen http://www.allenmadsen.com
On Sat, Jun 18, 2016 at 8:39 PM, Ben Wilson <[email protected]> wrote: > 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 [email protected]. > 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. -- 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/CAK-y3CvbzDC5jmfmfkjoGna_ztYb5LbQ2uhftL3LgRYpPdVHOw%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
