Why does the reverse() function in the Swift standard library return ReverseRandomAccessCollection?

It is an performance optimization for both time and memory.
The ReverseRandomAccessCollection presents the elements of the
original array in reverse order, without the need to create a new array
and copying all elements (as long as the original array is not
mutated).

You can access the reversed elements with subscripts:

let el0 = arr[arr.startIndex]
let el2 = arr[arr.startIndex.advancedBy(2)]

or

for i in arr.indices {
    print(arr[i])
}

You can also create an array explicitly with

let reversed = Array(["Mykonos", "Rhodes", "Naxos"].reversed())

A dictionary is also a sequence of Key/Value pairs. In

let dict = ["greek" : "swift sometimes", "notgreek" : "ruby for this example"].reverse()

a completely different reversed() method is called:

extension SequenceType {
    /// Return an `Array` containing the elements of `self` in reverse
    /// order.
    ///
    /// Complexity: O(N), where N is the length of `self`.
    @warn_unused_result
    public func reversed() -> [Self.Generator.Element]
}

The result is an array with the Key/Value pairs of the dictionary
in reverse order. But this is of limited use because the order
of the Key/Value pairs in a dictionary can be arbitrary.

Leave a Comment