Module collections/ordered_map

collections/ordered_map

Insertion-ordered map.

OrderedMap(K, V) preserves the order in which keys were first inserted, similar to JavaScript's Map or Python's dict (≥ 3.7). Backed by a HashMap for O(1) average-time lookup and an ArrayList of keys for deterministic iteration order.

Complexity

  • set (new key): O(1) amortized
  • set (existing key): O(1) — value updated in place, order unchanged
  • get / contains_key: O(1) average
  • remove: O(n) — must rebuild the key order list to skip the removed key
  • iter / keys / values: O(n), in insertion order

Example

{ OrderedMap } :: import "std/collections/ordered_map";

m := OrderedMap(String, i32).new();
m.set(`alpha`, i32(1));
m.set(`beta`,  i32(2));
m.set(`gamma`, i32(3));

// Iteration yields keys in insertion order.
it := m.keys();
while true, {
  match(it.next(),
    .Some(k) => println(k),
    .None => break
  );
};

Types

OrderedMap type-function
fn(comptime(K) : Type, comptime(V) : Type) -> (comptime(fn_return_yob7283783_id_34) : Type)

Ordered map preserving insertion order of keys. Keys must implement Eq and Hash.

Type Parameters

NameTypeNotes
KTypecomptime
VTypecomptime
impl(forall(K : Type, V : Type), where(K <: (Eq(K), Hash)), OrderedMap(K, V), ...)
new : (fn() -> Self)

Create an empty OrderedMap.

Returns: Self

len : (fn(self : Self) -> usize)

Number of entries.

Returns: usize

is_empty : (fn(self : Self) -> bool)

Whether the map is empty.

Returns: bool

contains_key : (fn(self : Self, key : K) -> bool)

Returns true if key is present.

Returns: bool

get : (fn(self : Self, key : K) -> Option(V))

Returns the value for key, or .None.

Returns: Option(V)

set : (fn(self : Self, key : K, value : V) -> Result(Option(V), HashMapError))

Insert or update key -> value.

  • For a new key, appends key to the insertion order.
  • For an existing key, only updates the value; order is preserved.

Returns Ok(.Some(old_value)) if key already existed, Ok(.None) for a new key, or .Err(_) on allocation failure.

Returns: Result(Option(V), HashMapError)

remove : (fn(self : Self, key : K) -> Option(V))

Remove key. Returns the removed value or .None. O(n) — rebuilds the key order list to drop the removed key.

Returns: Option(V)

clear : (fn(self : Self) -> unit)

Remove all entries.

Returns: unit

impl(forall(K : Type, V : Type), where(K <: (Eq(K), Hash)), OrderedMap(K, V), ...)
keys : (fn(self : Self) -> OrderedMapKeys(K, V))

Iterator over keys in insertion order.

Returns: OrderedMapKeys(K, V)

values : (fn(self : Self) -> OrderedMapValues(K, V))

Iterator over values in insertion order.

Returns: OrderedMapValues(K, V)

iter : (fn(self : Self) -> OrderedMapIter(K, V))

Iterator over (key, value) pairs in insertion order.

Returns: OrderedMapIter(K, V)

OrderedMapEntry type-function
fn(comptime(K) : Type, comptime(V) : Type) -> (comptime(fn_return_yob7283783_id_446) : Type)

Key-value pair yielded by OrderedMapIter.

Type Parameters

NameTypeNotes
KTypecomptime
VTypecomptime
OrderedMapKeys type-function
fn(comptime(K) : Type, comptime(V) : Type) -> (comptime(fn_return_yob7283783_id_170) : Type)

Iterator over the keys of an OrderedMap in insertion order.

Type Parameters

NameTypeNotes
KTypecomptime
VTypecomptime
impl(forall(K : Type, V : Type), where(K <: (Eq(K), Hash)), OrderedMapKeys(K, V), ...)
next : (fn(ref(self) : Self) -> Option(K))

Returns: Option(K)

OrderedMapValues type-function
fn(comptime(K) : Type, comptime(V) : Type) -> (comptime(fn_return_yob7283783_id_308) : Type)

Iterator over the values of an OrderedMap in insertion order.

Type Parameters

NameTypeNotes
KTypecomptime
VTypecomptime
impl(forall(K : Type, V : Type), where(K <: (Eq(K), Hash)), OrderedMapValues(K, V), ...)
next : (fn(ref(self) : Self) -> Option(V))

Returns: Option(V)

OrderedMapIter type-function
fn(comptime(K) : Type, comptime(V) : Type) -> (comptime(fn_return_yob7283783_id_495) : Type)

Iterator over (key, value) pairs of an OrderedMap in insertion order.

Type Parameters

NameTypeNotes
KTypecomptime
VTypecomptime
impl(forall(K : Type, V : Type), where(K <: (Eq(K), Hash)), OrderedMapIter(K, V), ...)
next : (fn(ref(self) : Self) -> Option(OrderedMapEntry(K, V)))

Returns: Option(OrderedMapEntry(K, V))