Maps:to_list/1 element order.

Ulf Wiger ulf@REDACTED
Fri Feb 28 10:58:04 CET 2020


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