> My bad, I was referring to Enum.reject/2! Well, Map.reject/2 does not exist yet. So, we could add it as well.
понедельник, 19 августа 2019 г., 0:35:41 UTC+3 пользователь Andrea Leopardi написал: > > > Why? How Enum.drop/2 is related to Enum.filter/2? They are doing > completely different things. > > My bad, I was referring to Enum.reject/2! > > Andrea Leopardi > an.le...@gmail.com <javascript:> > > > On Sat, Aug 17, 2019 at 11:42 PM Roman Smirnov <pom...@gmail.com > <javascript:>> wrote: > >> Why? How Enum.drop/2 is related to Enum.filter/2? They are doing >> completely different things. >> >> четверг, 15 августа 2019 г., 13:37:07 UTC+3 пользователь Andrea Leopardi >> написал: >>> >>> We should also address the fact that if we add Map.filter/2, we also >>> likely have to add Map.drop/2 (to mimic Enum and Stream), but that name is >>> already taken. >>> >>> On Thu, 15 Aug 2019 at 12:26, Johanna Larsson <johanna....@gmail.com> >>> wrote: >>> >>>> The stream version is by far the slowest, which isn't surprising since >>>> streams bring some overhead. Didn't measure memory usage though >>>> https://gist.github.com/joladev/2b51260107078a1fc7f9d4504916fe21 >>>> >>>> Honestly, I tend to agree it would be nice to add it, for feature >>>> completeness, even if it doesn't improve performance hugely. I understand >>>> the desire to avoid unnecessary clutter in the core language, but this is >>>> a >>>> core erlang function that we're explicitly not wrapping, when most of the >>>> other ones are wrapped. And most likely just because it wasn't around from >>>> the start. It's quite a bit more ergonomic to use `Map.filter` rather than >>>> `for` or `map|>Enum.filter(pred)|>Enum.into({})`. Much cleaner. >>>> >>>> Not too hard to implement your own version of `Map.filter` though, so I >>>> don't feel too strongly about it. >>>> >>>> On Thu, Aug 15, 2019 at 11:12 AM Alexei Sholik <alcos...@gmail.com> >>>> wrote: >>>> >>>>> 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> >>>>> 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. >>>>>> 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-l...@googlegroups.com. >>>>> To view this discussion on the web visit >>>>> https://groups.google.com/d/msgid/elixir-lang-core/CAAPY6eO5aDifRxHxv7QtD4%3Di_bYbUw1sphxMhq4jEjuR9naPSQ%40mail.gmail.com >>>>> >>>>> <https://groups.google.com/d/msgid/elixir-lang-core/CAAPY6eO5aDifRxHxv7QtD4%3Di_bYbUw1sphxMhq4jEjuR9naPSQ%40mail.gmail.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-l...@googlegroups.com. >>>> To view this discussion on the web visit >>>> https://groups.google.com/d/msgid/elixir-lang-core/CAKL9qdTxQWdKDM7B%3D1XLkf7w9PeshpfSyrpsuhM%3DeaEqdZVSDA%40mail.gmail.com >>>> >>>> <https://groups.google.com/d/msgid/elixir-lang-core/CAKL9qdTxQWdKDM7B%3D1XLkf7w9PeshpfSyrpsuhM%3DeaEqdZVSDA%40mail.gmail.com?utm_medium=email&utm_source=footer> >>>> . >>>> >>> -- >>> >>> Andrea Leopardi >>> an.le...@gmail.com >>> >> -- >> 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/c819a8cc-c3b6-41cc-a056-76a294b79fb6%40googlegroups.com >> >> <https://groups.google.com/d/msgid/elixir-lang-core/c819a8cc-c3b6-41cc-a056-76a294b79fb6%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/13ab9f68-3895-47b1-bd7f-dee62f1a2e66%40googlegroups.com.