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?
Dies ist nicht spezifisch für MapSet
, aber das gleiche passiert mit normalen Map
( MapSet
verwendet Map
unter der Haube):
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.