Data Structures
list of {Key, Value} / atoms ordered key-value list older; prefer maps general balanced trees ordered key-value, smallest/largest, iterators
sets:new([{version, 2}]) uses maps (default in OTP 28) ordered list set small sets, sorted balanced tree set large ordered sets functional, extendible array O(log n) access FIFO double-ended queue amortized O(1) directed graphs (ETS-based, mutable) topsort, components
%% proplists
Opts = [{timeout, 5000}, verbose],
proplists:get_value(timeout, Opts, 1000),
proplists:get_bool(verbose, Opts).
%% gb_trees
T0 = gb_trees:empty(),
T1 = gb_trees:insert(5, five, T0),
T2 = gb_trees:enter(3, three, T1), % insert or update
gb_trees:lookup(3, T2), % {value, three}
gb_trees:smallest(T2), gb_trees:to_list(T2).
%% sets
S = sets:from_list([1, 2, 3]),
sets:is_element(2, S), sets:union(S, sets:from_list([4])), sets:to_list(S).
%% queue
Q0 = queue:new(),
Q1 = queue:in(a, Q0), Q2 = queue:in(b, Q1),
{{value, a}, Q3} = queue:out(Q2),
queue:len(Q3), queue:peek(Q3).
%% array
A0 = array:new(10, {default, 0}),
A1 = array:set(3, 42, A0),
array:get(3, A1), array:size(A1), array:to_list(A1).
%% digraph
G = digraph:new(),
[digraph:add_vertex(G, V) || V <- [a, b, c]],
digraph:add_edge(G, a, b), digraph:add_edge(G, b, c),
digraph:get_path(G, a, c), % [a,b,c]
digraph_utils:topsort(G),
digraph:delete(G).