Type : Protocol

A collection that supports backward as well as forward traversal.

후방, 전방 순회를 둘 다 지원하는 컬렉션(Collection) Protocol

양방향 접근 컬렉션 프로토콜 선언

Untitled

OverView

양방향 컬렉션(Bidirectional Collection)은 전방 뿐만 아니라 후방의 유효한 인덱스에서 순회하는 것을 지원한다.

양방향 컬렉션은 이렇듯 전방뿐 아니라 후방 순회까지 가능하다. 이에 따른 추가적인 연산기능을 제공하고 있다.

마지막 요소를 효율적으로 접근할 수 있도록 하는 기능, 역순으로 요소들을 얻을 수 있게 해주는 reserved() 메서드 등이 그 예이다. 그 뿐만 아니라, 양방향 컬렉셔는 suffix(_:) 와 같은 메서드를 사용할 수 있게 해준다.

suffix() 메서드를 조금 살펴보자.

suffix(_:)

Returns a subsequence, up to the given maximum length, containing the final elements of the collection.

컬렉션의 최종 요소를 포함하는 지정된 최대 길이까지의 시퀀스를 반환한다.

import Foundation

var str = "Hello, Playground"
print(str.suffix(10))
// Playground
print(str.suffix(30)) // 해당 String의 인덱스가 초과될 경우에는 str의 글자가 다 나온다.
// Hello, Playground

str변수는 String 타입이자 Bidirectional Collection이기에, suffix(_:) 메서드를 접근하여 사용할 수 있다.

위의 코드는 문자열의 뒤에서부터 10자리의 문자열을 반환하여 출력하는 코드이다.

아래 코드는 유효한 인덱스의 범위가 아닐경우 해당 글자가 다 나오게 된다.

suffix(_:) 메서드는 양방향 컬렉션인 String에서는 사용이 가능하고, Array와 같은 랜덤접근 컬렉션에서도 사용이 가능하다. 인자값이 K라고 할 때, 양방향 컬렉션인 String의 경우 suffix(_:)시간복잡도는 O(K), **랜덤 접근 컬렉션인 Array 의 경우 시간복잡도는 O(1)**이다.

양방향 컬렉션 적용, 준수하기

(Conforming to the BidrectionalCollection Protocol)