Erlang 25 comes with
https://www.erlang.org/blog/my-otp-25-highlights/#mapsgroups_from_list23

On Sun, May 8, 2022 at 6:59 PM Aaron Ross <superhawk...@gmail.com> wrote:

> I’ve seen this referred to as `key_by` in a few other contexts, such as
> lodash <https://lodash.com/docs/#keyBy>. When I was first learning Elixir
> from a JS background, I recall looking for a comparable function in Enum a
> few times, but I believe the `Map.new/2` approach is idiomatic.
>
> On Sunday, May 8, 2022 at 7:39:57 AM UTC-7 José Valim wrote:
>
>> I think a code snippet here would help but it does feel like Map.new does
>> most of the job:
>>
>>     Map.new(collection, &{&1.email, &1})
>>
>> I am not convinced about the name index_by. I understand the meaning of
>> index here, but it is not what index means in Enum (i.e. an integer).
>>
>> On Sun, May 8, 2022 at 3:31 PM Adam Lancaster <ad...@a-corp.co.uk> wrote:
>>
>>> Map.new is the right approach in my humble opinion, i’m not sure what
>>> index_by would add over that. Keen to hear other opinions though.
>>>
>>> The function proposed sounds more like “group_by_index” to me but that’s
>>> just me.
>>>
>>> Best
>>> Adz
>>>
>>> On Sun, 8 May 2022 at 14:24, Tobias Pfeiffer <pra...@gmail.com> wrote:
>>>
>>>> Hello everyone,
>>>>
>>>> I'd like to propose `Enum.index_by/2` (or potentially /3, see further
>>>> down).
>>>>
>>>> Essentially, it is supposed to be same thing was `Enum.group_by/3` but
>>>> without putting the values into a list - so one key, one item.
>>>>
>>>> It is inspired by the Rails Enumerable method of the same name [1].
>>>>
>>>> Now, why should we have this?
>>>>
>>>> I believe the use case, while not super common, is common enough and
>>>> valid. Most often I see it when you have 2 different collections of data
>>>> and you want to stitch them together. For instance, you have accounts of
>>>> your users on another platform and you want to associate your users to
>>>> those accounts - so you fetch your users, index them by their email as a
>>>> key and then you can go through the other list effectively fitting them
>>>> together with your user. Or take payment transactions in an external
>>>> payment system and payment transactions as tracked in your application.
>>>>
>>>> I'm not aware of a "nice" way to do this in Elixir right now. The
>>>> "best" would probably be `Map.new/2` although most often I see people fall
>>>> back to `Enum.reduce/3` which I consider sub optimal for most cases
>>>> (thankfully most common usages of `Enum.reduce/3` usually have a better
>>>> equivalent in the language itself).
>>>>
>>>> While `Enum.group_by/2` does most of what I want here, transforming all
>>>> the one element lists into just the element to easily work with it is
>>>> somewhat annoying.
>>>>
>>>> Speaking of which, it might be fair to say that if we want to do this
>>>> we'd want `Enum.index_by/3` to mirror `Enum.group_by/3` (with an optional
>>>> value function) which sounds good to me.
>>>>
>>>> Happy to tackle the implementation myself.
>>>>
>>>> Thank you + cheers,
>>>> Tobi
>>>>
>>>> [1]
>>>> https://api.rubyonrails.org/classes/Enumerable.html#method-i-index_by
>>>>
>>>> PS: Have a bunny
>>>>
>>>> [image: IMG_20220130_140748_Bokeh.jpg]
>>>>
>>>>
>>>> --
>>>> 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-co...@googlegroups.com.
>>>> To view this discussion on the web visit
>>>> https://groups.google.com/d/msgid/elixir-lang-core/CAG3Z5YR3rQL4kcNFACj59i6t7GuBHN34bGCubQ6V8diG47ePLg%40mail.gmail.com
>>>> <https://groups.google.com/d/msgid/elixir-lang-core/CAG3Z5YR3rQL4kcNFACj59i6t7GuBHN34bGCubQ6V8diG47ePLg%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-lang-co...@googlegroups.com.
>>>
>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/elixir-lang-core/CADwgC_BsS8BvjfhxBFkcPfyuv3N_J%3DtcZdT0DfJisoVxbkx0KQ%40mail.gmail.com
>>> <https://groups.google.com/d/msgid/elixir-lang-core/CADwgC_BsS8BvjfhxBFkcPfyuv3N_J%3DtcZdT0DfJisoVxbkx0KQ%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-lang-core+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/elixir-lang-core/989f7e41-446b-4f63-8106-e9beb20f6b06n%40googlegroups.com
> <https://groups.google.com/d/msgid/elixir-lang-core/989f7e41-446b-4f63-8106-e9beb20f6b06n%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>


-- 
Kurtis Rainbolt-Greene,
Software Developer & Founder of Difference Engineers
202-643-2263

-- 
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/CAMhJPGiy-5GR%3DscvEt65WCFtZdY2-gcutLEF-DAjLGgzj6_0OQ%40mail.gmail.com.

Reply via email to