Warum wird Elixirs MapSet nach 32 Elementen ungeordnet?

9
%Vor%

Hier ist die Implementierung in Elixir 1.3

%Vor%

Auch wenn die Reihenfolge in MapSet keine Rolle spielt, sich aber immer noch wundern, warum ein MapSet nach 32 Elementen ungeordnet wird?

    
sbs 15.07.2016, 00:53
quelle

1 Antwort

12

Dies ist nicht spezifisch für MapSet , aber das gleiche passiert mit normalen Map ( MapSet verwendet Map unter der Haube):

%Vor%

Dies liegt daran, dass Erlang (höchstwahrscheinlich als Optimierung) Karten mit einer Größe bis zu MAP_SMALL_MAP_LIMIT als sortiert nach Schlüssel Array . Erst nachdem die Größe größer als MAP_SMALL_MAP_LIMIT ist, wechselt Erlang zum Speichern der Daten in einem Hash Array Mapped Trie wie Datenstruktur . Im Nicht-Debug-Modus Erlang ist MAP_SMALL_MAP_LIMIT definiert 32 , also sollten alle Karten mit einer Länge von bis zu 32 in sortierter Reihenfolge gedruckt werden. Beachten Sie, dass dies ein Implementierungsdetail ist, soweit ich weiß, und Sie sollten sich nicht auf dieses Verhalten verlassen; Sie können den Wert der Konstante in der Zukunft ändern oder zu einem völlig anderen Algorithmus wechseln, wenn er leistungsfähiger ist.

    
Dogbert 15.07.2016, 03:42
quelle

Tags und Links