Hi, thanks for the proposal!

We have added list keysort Exactly for use cases like this, So given the
new functions are wrappers around keysort and given the new docs, I would
push people towards using keysort first.

On Wed, May 4, 2022 at 22:09 'eksperimental' via elixir-lang-core <
elixir-lang-core@googlegroups.com> wrote:

> Hi group.
> When working on sorting some data I realized that after sorting the
> enumerable, I had to map and iterate again to do a data transformation
> of the elements.
>
> So I look for a function that would already do this and I cannot find
> it. So by looking at the source code
>
> https://github.com/elixir-lang/elixir/blob/1907914cf0d9d25b32373d3c8ad6b4b59877baaf/lib/elixir/lib/enum.ex#L3213-L3218
> I see that it is already mapping after the sorting, in order to
> return the original values.
> So we are unnecessarily  mapping once.
>
> What I propose is introduce  Enum.sort_by_transform/4 which takes a
> transformer function and applies it to each element in the last map
> iteration.
>
> >    sort_by_transform(enumerable, mapper, transformer, sorter)
> >
> >     Sorts the mapped results of the `enumerable` according to
> >    the provided `sorter` function and later each element is tranformed
> >    by applying the `transformer` function. >>
>
> After I'm done with the implementation I see in the documentation I
> found that a new section has been added to the docs, (due to the
> introduction of `List.keysort/3` in the development version of Elixir.
>
> https://hexdocs.pm/elixir/main/Enum.html#sort_by/3-performance-characteristics
>
> Coincidentally, the more performant solution that I proposes here does
> exactly what the implementation of Enum.sort_by_transform/4 does.
>
> https://github.com/eksperimental/elixir/commit/77c7bcea9348c0dfb16d0e94b2b5ba9d239a3cd5#diff-9a538f965f1fdc2cf9780b1008560f05bfa2ff80d145445abe37a0d70d3828a2R3219-R3230
>
> So the example in the guide could be simplified as (after removing
> the filtering of the id of the products, to make the example easier to
> grasp)
>
>     Enum.sort_by_transform(products, & &1.price, & &1.name)
>
> Additionally (and optionally) I introduce Enum.map_sort_by/3 which
> solves the common case of mapping and sorting in one go.
> For example to sort the products alphabetically:
>
>     Enum.map_sort_by(products, & &1.name)
>
> You can see the full implementation here:
>
> https://github.com/elixir-lang/elixir/compare/main...eksperimental:sort_by_transform
>
>
> Please, let me know what you all think.
>
> --
> 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/6272dd6b.1c69fb81.94f35.199eSMTPIN_ADDED_MISSING%40gmr-mx.google.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-lang-core+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4KJTYyiD4LRTq048cLwdCQrb46Rswv1qWEHE6_mr5_Cdg%40mail.gmail.com.

Reply via email to