> The simplest alternative is to use :maps.filter(). It's not as easy to pipe into, but that's a minor concern for me.
It's not an alternative, it's a workaround that you have to use, b/c there is no wrapper on this function. And this suggestion is all about adding this wrapper to Elixir. четверг, 15 августа 2019 г., 12:12:31 UTC+3 пользователь alco написал: > > The simplest alternative is to use :maps.filter(). It's not as easy to > pipe into, but that's a minor concern for me. > > As another alternative, this should be faster and have lower memory > footprint than using Enum, although you'd need to benchmark it as well to > be sure: > > map > |> Stream.filter(predicate) > |> Map.new() > > Personally, I would love to see an extension for Map.new() that would > allow filtering the first argument in addition to the currently supported > transformation. So instead of the current > > Map.new(enumerable, fn thing -> {key, val} end) > > we could have > > Map.new(enumerable, map: fn thing -> {key, val} end, filter: fn {_key, > val} -> predicate(val) end) > > Such an extension is unlikely to be added though because it would be > another way of doing what is already possible with Enum, Stream, and Map. > > On Thu, Aug 15, 2019 at 10:29 AM Roman Smirnov <pom...@gmail.com > <javascript:>> wrote: > >> Since OTP 18 there is a pretty convenient function :maps.filter >> <http://erlang.org/doc/man/maps.html#filter-2>. >> >> I think it would be nice to have Map.filter(map, predicate) in Elixir as >> well instead of doing >> >> >> map|> Enum.filter(predicate)|> Enum.into(%{}) >> >> >> or >> >> for {key, value} <- map, some_filter(key, value), into: %{}, do: {key, value} >> >> The first one alternative is slower, b/c of 2-step transformation, and >> the second one consume more memory, could not be piped and has a lack >> of expressiveness (too imperative way to do a simple filtration). >> There were benchmarks and a small discussion in PR: >> https://github.com/elixir-lang/elixir/pull/9292, but the discussion >> should be moved to this mailing list. >> >> >> -- >> 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-l...@googlegroups.com <javascript:>. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/elixir-lang-core/5d403c4a-91f8-4c4d-8dc0-297185a2aed8%40googlegroups.com >> >> <https://groups.google.com/d/msgid/elixir-lang-core/5d403c4a-91f8-4c4d-8dc0-297185a2aed8%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> > -- 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/2d4e6054-3ef3-4961-8b7d-eef60ffcbc2d%40googlegroups.com.