[erlang-questions] analogue of lists:keyfind and other lists:key*** functions for lists which contain maps

Lukas Larsson <>
Sun Nov 23 15:43:23 CET 2014


Hello,

I agree with you that in certain situations they would be very convenient.
I've myself already written these functions in a couple of modules.

How do you imagine the semantics would work? It is fairly straight forward
when the list only contains maps or tuples.

lists:keyfind(you, name, [#{ name => me, from => here }, #{ name => you,
from => there}]) returns #{ name => you, from => there}.

But if we start to mix them some interesting corner cases pop up:

lists:keyfind(2, 1,[#{ 2 => 3 },{2, 4},#{ 1 => 2 } ]) returns {2,4} or #{ 1
=> 2 }?
lists:keyfind(1, id, [{1,2}, #{ id => 2}, #{ id => 1}) returns #{ id => 1 }
or crashes as id is not a valid key for {1,2}?

Or error cases of today:

lists:keyfind(2, id, []) today gives badarg, but should return false for a
map list?

The safest way to introduce these functions would be to create new ones
called something like lists:mkeyfind, but if possible it would be very neat
to use the same API. It really is unfortunate that lists:keyfind is so
forgiving today, you can mix and match whatever you want in the list and
keyfind will quietly ignore it.

Also we have to consider which of the lists:key* functions we want a map
counterpart? Does it make sense for all of them?

Thoughts? Ideas? Suggestions?

Lukas


On Sat, Nov 22, 2014 at 7:33 PM, John Doe <> wrote:

> It would be nice to extend lists module with a set of optimized functions
> like lists:key*** for lists containing maps.
>
> _______________________________________________
> erlang-questions mailing list
> 
> http://erlang.org/mailman/listinfo/erlang-questions
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20141123/994184ce/attachment.html>


More information about the erlang-questions mailing list