# Collections in Dylan¶

## Common Collection Types¶

Class Location Description
<array> dylan:dylan Multi-dimensional data, much like a matrix.
<vector> dylan:dylan A one-dimensional array. Vectors provide fast random access.
<stretchy-vector> dylan:dylan A vector that can have elements directly added and removed without requiring a complete copy.
<list> dylan:dylan A linked list.
<deque> dylan:dylan A double-ended queue.
<set> collections:set A set is for efficiently tracking membership.
<bit-set> collections:bit-set A set with bits for members.
<bit-vector> collections:bit-vector A vector optimized for storing bit values.
<byte-vector> collections:byte-vector A vector of bytes.
<table> dylan:dylan A mapping between keys and values.
<string-table> collections:table-extensions A <table> with strings for keys.

Note

Because of the default comparison function for <table>, it is important to use <string-table> when the keys will be strings.

## Mutable vs. Immutable¶

Many operations don’t modify the collection passed in. The exception is when you use an operation ending in ! on a stretchy collection.

For this reason, if you want to modify a collection frequently, be sure to pay attention to the type of collection that you’re working with.

In many cases, you will need to assign the result of an operation back to the source collection:

threads := add(threads, thread);


In cases where you are modifying a collection frequently, you may want to consider using a <stretchy-vector> rather than a <vector> or some other type of collection.

## Common Operations¶

Class Operation Summary
<collection> any? Returns the first true value obtained by iterating over one or more collections.
do Iterates over one or more collections for side effect.
empty? Returns true if its argument is empty.
every? Returns true if a predicate returns true when applied to all corresponding elements of a set of collections.
fill! Fills a collection with a specified value.
find-key Returns the key in a collection such that the corresponding collection element satisfies a predicate.
key-sequence Returns a sequence containing the keys of its collection argument. This is commonly used with <table> instances.
map Iterates over one or more collections and collects the results in a freshly allocated collection. See also map-as and map-into.
member? Returns true if a collection contains a particular value.
reduce Combines the elements of a collection and a seed value into a single value by repeatedly applying a binary function. See also reduce1.
replace-elements! Replaces those collection elements that satisfy a predicate.
size Returns the size of its argument.
<sequence> add / add! Adds an element to a sequence.
add-new / add-new! Adds a new element to a sequence.
choose Returns those elements of a sequence that satisfy a predicate. See also choose-by.
concatenate Returns the concatenation of one or more sequences in a sequence of a type determined by the type-for-copy of its first argument. See also concatenate-as.
copy-sequence Returns a freshly allocated copy of some subsequence of a sequence.
intersection Returns the intersection of two sequences.
remove / remove! Removes an element from a sequence.
remove-duplicates Returns a sequence without duplicates.
replace-subsequence! Replaces a portion of a sequence with the elements of another sequence.
reverse / reverse! Returns a sequence with elements in the reverse order of its argument sequence.
sort / sort! Returns a sequence containing the elements of its argument sequence, sorted.
subsequence-position Returns the position where a pattern appears in a sequence.
union Returns the union of two sequences.
<list> head Returns the head of a list.
tail Returns the tail of a list.
<deque> push Adds an element to the front of a deque.
pop Removes and returns the first element of a deque.
push-last Adds an element to the end of a deque.
pop-last Removes and returns an element from the end of a deque.
<table> remove-key! Modifies an explicit key collection so it no longer has a particular key.