Protocol

RandomAccessCollection

A collection that supports efficient random-access index traversal.

Declaration

protocol RandomAccessCollection where Self.Indices : RandomAccessCollection, Self.SubSequence : RandomAccessCollection

Overview

Random-access collections can move indices any distance and measure the distance between indices in O(1) time. Therefore, the fundamental difference between random-access and bidirectional collections is that operations that depend on index movement or distance measurement offer significantly improved efficiency. For example, a random-access collection’s count property is calculated in O(1) instead of requiring iteration of an entire collection.

Conforming to the RandomAccessCollection Protocol

The RandomAccessCollection protocol adds further constraints on the associated Indices and SubSequence types, but otherwise imposes no additional requirements over the BidirectionalCollection protocol. However, in order to meet the complexity guarantees of a random-access collection, either the index for your custom type must conform to the Strideable protocol or you must implement the index(_:offsetBy:) and distance(from:to:) methods with O(1) efficiency.

Topics

Associated Types

associatedtype Indices

A type that represents the indices that are valid for subscripting the collection, in ascending order.

Required.

associatedtype SubSequence

A collection that represents a contiguous subrange of the collection’s elements.

Required.

Instance Properties

var indices: Self.Indices

The indices that are valid for subscripting the collection, in ascending order.

Required. Default implementation provided.

Instance Methods

func distance(from: Self.Index, to: Self.Index) -> Int

Returns the distance between two indices.

Required. Default implementation provided.

func formIndex(after: inout Self.Index)

Replaces the given index with its successor.

Required.

func formIndex(before: inout Self.Index)

Replaces the given index with its predecessor.

Required.

func index(Self.Index, offsetBy: Int) -> Self.Index

Returns an index that is the specified distance from the given index.

Required. Default implementation provided.

func index(Self.Index, offsetBy: Int, limitedBy: Self.Index) -> Self.Index?

Returns an index that is the specified distance from the given index, unless that distance is beyond a given limiting index.

Required. Default implementation provided.

func index(after: Self.Index) -> Self.Index

Returns the position immediately after the given index.

Required. Default implementation provided.

func index(before: Self.Index) -> Self.Index

Returns the position immediately before the given index.

Required. Default implementation provided.

Subscripts

subscript(Range<Self.Index>) -> Self.SubSequence

Accesses a contiguous subrange of the collection’s elements.

Required.

See Also

Collection Traversal

protocol BidirectionalCollection

A collection that supports backward as well as forward traversal.