Maps:to_list/1 element order.

Ulf Wiger ulf@REDACTED
Fri Feb 28 11:00:58 CET 2020


I should perhaps clarify that the cost of 'canonical' (in this case,
sorting) would of course still be lower than calling lists:sort/1 to
get what you need. Presumably, if you actually need the elements
ordered, there will always be a cost.

BR,
Ulf W

Den fre 28 feb. 2020 kl 10:58 skrev Ulf Wiger <ulf@REDACTED>:
>
> This was discussed at length in a previous thread:
>
> http://erlang.org/pipermail/erlang-questions/2017-October/093981.html
>
> The short answer is "no", you can't rely on the order, and this should
> perhaps be more clearly documented. In the future, it might be nice
> with some 'canonical' option to e.g. term_to_binary/2, to ensure that
> encoding is consistent. This would of course come at a cost.
>
> BR,
> Ulf W
>
> Den fre 28 feb. 2020 kl 10:45 skrev Valentin Micic <v@REDACTED>:
> >
> > Hi
> >
> > Even though documentation indicates that:
> >
> > to_list(Map) -> [{Key, Value}]
> >
> > Types
> >
> > Map = map()
> > Key = Value = term()
> >
> >
> > Returns a list of pairs representing the key-value associations of Map, where the pairs [{K1,V1}, ..., {Kn,Vn}] are returned in arbitrary order.
> >
> > It appears that the list returned has been sorted in ascending order, using value of the key as a criterion for sorting.
> > I did some testing using a bit modified example offered in documentation:
> >
> >
> > (x@REDACTED)47> f(Map), Map = #{42 => value_three,1337 => "value two","a" => 1, 1 => "Last entered"},maps:to_list(Map).
> > [{1,"Last entered"},
> >  {42,value_three},
> >  {1337,"value two"},
> >  {"a",1}]
> >
> >
> >
> > When I changed 1337 to -1337, I get the result that indicates that the list of pairs is *not* returned in arbitrary order, but actually sorted:
> >
> >
> > (x@REDACTED)48>
> > (x@REDACTED)48> f(Map), Map = #{42 => value_three, -1337 => "value two","a" => 1, 1 => "Last entered"},maps:to_list(Map).
> > [{-1337,"value two"},
> >  {1,"Last entered"},
> >  {42,value_three},
> >  {"a",1}]
> >
> >
> > Could one relay on this always being the case?
> > A I need this list to be sorted, I would hate to attempt sorting the already sorted list.
> >
> > Thanks in advance
> >
> > V/
> >


More information about the erlang-questions mailing list