HierarchicalCollection
public protocol HierarchicalCollection
Represents a hierarchical collection of data.
Many efficient data structures naturally contain some hierarchy. Examples include B-trees, adjacency lists in graphs, and elements within a hash table (if using bucket chaining). By explicitly encoding the hierarchical nature of a collection into the the static type, more efficient algorithms are possible to express.
For additional details, please see:
- “Segmented Iterators and Hierarchical Algorithms”, Matthew H. Austern, 2000.
- “Hierarchical Data Structures and Related Concepts for the C++ Standard Library”, Reiter & Rivera, 2013.
Note: due to limitations in Swift’s type system, a single type cannot be both a
HierarchicalCollection and a Collection.
When conforming to HierarchicalCollection, only forEachWhile and count are required.
-
The type of element contained within this hierarchical collection.
Declaration
Swift
associatedtype Element -
A cursor represents a location within the collection.
Beware: mutations to the collection may invalidate the Cursor.
Declaration
Swift
associatedtype Cursor : Comparable -
The total number of elements within this collection.
Beware: this might be O(n) in some collections!
Declaration
Swift
var count: Int { get } -
Call
fnfor each element in the collection untilfnreturns false.Declaration
Parameters
startStart iterating at elements corresponding to this index. If nil, starts at the beginning of the collection.
Return Value
a cursor into the data structure corresponding to the first element that returns false.
-
forEach(_:Default implementation) Call
fnfor each element in the collection.Note: this is identical to
Sequence.forEach, however we cannot re-use the name.Default Implementation
Declaration
Swift
func forEach(_ fn: (Element) throws -> Void) rethrows -
firstIndex(where:Default implementation) Finds the first index where
predicateistrue, and returns a cursor that points to that location. Ifpredicatenever returnstrue,nilis returned.Default Implementation
-
flatten()Default implementationCopies all elements in this hierarchical data structure into a flat array.
Default Implementation
Declaration
Swift
func flatten() -> [Element] -
flatten(into:Default implementation) Copies all elements in this hierarchical data structure into the end of a collection.
Default Implementation
Declaration
-
mapAndFlatten(_:Default implementation) Applies
fnon each element in the collection, and concatenates the results.Default Implementation
Declaration
Swift
func mapAndFlatten<T>(_ fn: (Element) throws -> T) rethrows -> [T] -
compactMapAndFlatten(_:Default implementation) Applies
fnon each element in the collection, and concatenates the non-nil results.Default Implementation
Declaration
Swift
func compactMapAndFlatten<T>(_ fn: (Element) throws -> T?) rethrows -> [T]
View on GitHub
HierarchicalCollection Protocol Reference