I feel like this a bit too nitch for Enum. I'll also say, I was surprised
the implementation sorts the two lists. I think what you've implemented
might better be called something like pair_by. I would have expected zip_by
to allow you to control how the zipped items are combined in the resulting
list.
[
[1, 2],
~w(one two)
]
|> Enum.zip_by(fn {num, word} ->
"#{num} is #{word}"
end)
#=> ["1 is one", "2 is two"]
This is also what it means in perl:
https://metacpan.org/pod/release/PEVANS/List-UtilsBy-0.09/lib/List/UtilsBy.pm#@vals-=-zip_by-{-ITEMFUNC-}-\@arr0,-\@arr1,-\@arr2,.
..
However, this could just as easily be handled by:
[
[1, 2],
~w(one two)
]
|> Enum.zip()
|> Enum.map(fn {num, word} ->
"#{num} is #{word}"
end)
#=> ["1 is one", "2 is two"]
Allen Madsen
http://www.allenmadsen.com
On Fri, Dec 14, 2018 at 7:19 AM <[email protected]> wrote:
> Hi,
>
> after having used this functionality in several different projects I like
> to propose it to be included in Elixir:
>
> Enum.zip_by/4 is similar to Enum.zip/2 but takes a function which
> determines the identity of elements (most often through some kind of
> identifier). That means elements can end up having no matching element in
> the other list.
>
> It is very handy when doing merges or updates of any kind. I mostly use it
> as a preparation step to make on-by-one decisions of how a merge is handled.
>
> Here is what I put together so far:
> https://github.com/elixir-lang/elixir/compare/master...odo:zip_by
>
> There are some things that I think could be improved where I like to have
> some input:
>
> - The code seems a bit bulky, compared to the other functions in the Enum
> module (comments could be removed)
> - I don't really like the name of the do_zip_by/3 recursive function
> - Both enumerables have to traversed several times (mapping, sorting,
> matching)
>
> Let me know what you think.
>
> Thanks,
> Florian
>
> --
> 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/e4bfde94-a39f-402c-9487-205dfe59acbf%40googlegroups.com
> <https://groups.google.com/d/msgid/elixir-lang-core/e4bfde94-a39f-402c-9487-205dfe59acbf%40googlegroups.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 [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/elixir-lang-core/CAK-y3Cu7BEExYRcMSEP1GSqUfg5DCKiZjaf6eY5AH6qpOQgOaA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.