> 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 <[email protected]
> <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 [email protected] <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 [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/elixir-lang-core/2d4e6054-3ef3-4961-8b7d-eef60ffcbc2d%40googlegroups.com.