티스토리 뷰
Traversing a Collection
컬렉션 순회하기
비록 Collection이 채택하고 있는 Sequence 프로토콜 또한 순회하는 역할로서 사용되어지지만, Collection 은 멀티패스(MultiPass)를 보장합니다.
어떠한 요소(element)라도 그들의 인덱스가 저장 됨으로서 반복적으로 접근될 수 있습니다. 무엇보다도, Collection의 색인 범위는 내부 요소들의 위치에 대한 유한한 범위를 갖고 있습니다. 즉, Collection이 유한한 색인 범위를 보장한다는 것은 많은 Sequence 작업을 함에 있어 안전을 보장함을 의미합니다. 예를들면 Collection이 특정 요소를 가지고 있는지 확인하는데 사용하는 contains(_:) 메서드가 있습니다.
그들의 위치에 따라 Collection의 요소들을 반복하여, 반복자를 사용해서 Collection 상에서 동일한 위치의 동일한 값을 생성하게 됩니다.
아래의 예시는 String에 속해있는 Character타입의 character가 반복자에 의해 String 내의 동일 요소들을 동일한 순서로 반환하는 예시입니다.
String 타입 또한 Collection 프로토콜을 준수하고 있습니다. 그러므로 반복자를 통한 순회가 가능합니다.
String의 Element는 Character 타입을 갖고 있습니다. 위의 for 문 루프에서는 Character 타입의 character 반복자를 통해 순차적으로 word문자열의 문자를 출력하게 됩니다. 그 출력 결과는 아래와 같습니다.
Conforming to the Collection Protocol
Collection Protocol 준수하기
요소들에 대한 반복되는 접근을 제공하는 커스텀 Sequence를 만들고 싶다면, 해당 Sequence가 Collection 프로토콜을 준수하도록 해주어야 합니다. Collection 프로토콜을 채택해야 더욱 유용하고 효율적인 Sequence, Collection 연산 인터페이스를 설정할 수 있습니다.
당신의 타입에 Collection 성능을 부여하기 위해, 아래와 같은 요구사항을 준수해야합니다.
- startIndex, endIndex 프로퍼티
- 타입 요소에 첨자접근에 대한 읽기전용 접근 제공
- 당신의 Collection index에 접근하기 위한 index(after:) 메서드
Expected Performance
컬렉션의 예상 성능
Collection 프로토콜을 준수하는 타입들은 startIndex, endIndex 프로퍼티를 제공해야합니다. 또한 일반적으로 O(1)의 시간복잡도로 요소(element)들을 첨자접근 할 수 있어야 합니다.
이러한 성능을 보장하지 않는 경우에는 그 부분에 대해 문서화해야 합니다. 왜냐하면 많은 Collection 연산들은 첨자방식 접근 시 O(1)의 시간복잡도를 갖고 있으며 이를 보장하고 있기 때문입니다.
Collection 연산의 성능은 Collection이 제공하는 인덱스의 타입에 의존합니다. 예를들면, 일반 Array등의 랜덤접근컬렉션(random-access collection)의 경우 두 인덱스 간 거리, Collection의 길이를 구할때(count) 시간복잡도는 O(1) 이지만, String등에서 준수하는 양방향컬렉션(bidirectional collection)의 경우 Collection의 길이를 구하기 위해 모든 요소를 순회해야하며 count의 시간복잡도는 O(N)이 됩니다.
'iOS 개발 > 개발자문서 정보' 카테고리의 다른 글
Swift String, 문자열의 count보다 isEmpty가 빠른 이유 (0) | 2020.07.01 |
---|---|
Swift BidirectionalCollection, 양방향컬렉션 알아보기 (0) | 2020.06.30 |
swift Collection, 원본 컬렉션 공유하는 Slices 활용법 (0) | 2020.06.23 |
iOS swift Collection, 컬렉션 특정 값, 범위 접근방법 (0) | 2020.06.22 |
iOS swift Collection, 컬렉션 프로토콜 개요 (0) | 2020.06.21 |
- Total
- Today
- Yesterday
- Collection
- 개발자문서
- ios
- CoreML
- swift문제
- 백준swift
- 프로그래머스swift
- 김프매매
- 부스트코스
- 스위프트
- swift string
- 컬렉션
- 백준알고리즘
- publisher
- 프로그래머스
- createML
- 알고리즘문제
- SwiftUI
- 알고리즘
- 프로토콜
- Protocol
- 자연어처리
- swift 기초
- swift언어
- swift 문자열
- uikit
- Swift 알고리즘
- swift reduce
- swift알고리즘
- swift
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |