This is correct. map |> Enum.map(&fun) |> Map.new is the fastest possible way to take a map and iterate over all of its keys.
Reason being, building a new list of {k, v} pairs and calling the `:maps.from_list` NIF always beats out N Map.put calls, which is how into: %{} works. It also creates less garbage. Map.new is basically just :maps.from_list if it gets passed a list. On Thursday, July 7, 2016 at 2:48:39 PM UTC-4, Michał Muskała wrote: > > What do you mean by not converting to a list? > The fastest way right now of doing a map on a map is actually to convert > to list, map and convert back to a map. > I’d suspect that’s the case with a lot of data structures as well, > actually. Lists are simply really good for recursion. > The benefit is even greater if you do multiple operations on those lists, > as the conversion happens (ideally) only > once. > > Michał. > > On 07 Jul 2016, at 19:35, Peter Hamilton <petergh...@gmail.com > <javascript:>> wrote: > > Does the Enumerable protocol enable the performance improvement of not > converting to a list? I don't think it does. > > On Thu, Jul 7, 2016, 10:24 AM Andrea Leopardi <an.le...@gmail.com > <javascript:>> wrote: > >> Enum.into/3 should do what you want :) >> >> On Thursday, 7 July 2016, Wiebe-Marten Wijnja <w.m.w...@panache-it.com >> <javascript:>> wrote: >> >>> I propose to add `into: collectable` as optional third argument to >>> Enum.map. >>> >>> This would allow mapping over things without first converting it to a >>> list and then convert it back. >>> >>> So: >>> >>> %{"a" => 1, "b" => 2} >>> |> Enum.map(fn {k, v} -> {String.upcase(k), v} end) >>> |> Enum.into(%{}) >>> >>> could be written as: >>> >>> %{"a" => 1, "b" => 2} >>> |> Enum.map(fn {k, v} -> {String.upcase(k), v} end, into: %{}) >>> >>> Not having to do the list conversion in the middle might also improve >>> performance. >>> >>> >>> Right now, enumerating and collecting in one go is of course possible >>> using `Kernel.SpecialForms.for`. `for` is however not very >>> pipeline-friendly. >>> >>> >>> What do you think? >>> >>> >>> Sincerely, >>> >>> ~Wiebe-Marten >>> >>> -- >>> 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/23c345b9-9ba1-48ea-8db0-6d2e9e700473%40googlegroups.com >>> >>> <https://groups.google.com/d/msgid/elixir-lang-core/23c345b9-9ba1-48ea-8db0-6d2e9e700473%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> For more options, visit https://groups.google.com/d/optout. >>> >> >> >> -- >> >> Andrea Leopardi >> an.le...@gmail.com <javascript:> >> >> >> -- >> 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-co...@googlegroups.com <javascript:>. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/elixir-lang-core/CAM9Rf%2BLY6tyh%3DE6iM%2BA7rmyY8dKP-ddCJpB%2BWZDn0jCuJ7FKaA%40mail.gmail.com >> >> <https://groups.google.com/d/msgid/elixir-lang-core/CAM9Rf%2BLY6tyh%3DE6iM%2BA7rmyY8dKP-ddCJpB%2BWZDn0jCuJ7FKaA%40mail.gmail.com?utm_medium=email&utm_source=footer> >> . >> 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 elixir-lang-co...@googlegroups.com <javascript:>. > To view this discussion on the web visit > https://groups.google.com/d/msgid/elixir-lang-core/CAOMhEnyR_50BhVdVugiQqDUxY9jUBNRCR23Bao%3DhwQ9Zmeh4PA%40mail.gmail.com > > <https://groups.google.com/d/msgid/elixir-lang-core/CAOMhEnyR_50BhVdVugiQqDUxY9jUBNRCR23Bao%3DhwQ9Zmeh4PA%40mail.gmail.com?utm_medium=email&utm_source=footer> > . > 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 elixir-lang-core+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/elixir-lang-core/af052020-b329-49e0-a7b7-f0bf487c123c%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.