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.

Reply via email to