자료에 던질 질문에 맞춰 컬렉션을 고르세요. Array<T>는 위치를
보존하고, Map<K, V>는 고유한 키와 값을 연결하며, Set<T>은 중복
없는 원소를 보관합니다. 각 메서드는 호스트 컨테이너의 우연한 동작이
아니라 이 역할을 지킵니다.
작업에 맞는 연산 고르기
| 하려는 일 | 권장 기능 | 결과와 위험 |
|---|---|---|
| 없을 수도 있는 배열 위치 읽기 | items.get(index) | Option<T>이며 위치가 없어도 실행 오류가 나지 않음 |
| 배열 위치가 반드시 있어야 한다고 요구 | items[index] | T이며 잘못된 인덱스는 실행 오류 |
| 없을 수도 있는 맵 키 찾기 | values.get(key) | Option<V> |
| 맵 키가 없을 때 기본값 사용 | values.getOr(key, default) | V |
| 집합에 값이 있는지 확인 | values.contains(value) | bool |
| 이후 변경과 분리된 맵 순서 확인 | keys, values, entries | 삽입 순서를 복사한 스냅샷 |
| 변환된 컬렉션 만들기 | map, filter, sorted, 집합 대수 | 새 컬렉션 |
| 기존 컬렉션 변경 | let mut 대상의 문서화된 변경 메서드 | 제자리 변경 |
Array, Map, Set 함께 사용하기
let tasks = ["draft", "check", "ship"]
let selected = tasks.get(1)
let mut scores: Map<string, int> = Map.new()
scores.insert("ada", 10)
scores.insert("lin", 12)
let mut labels = Set.of("docs")
labels.add("tests")
print("{selected}:{scores.get("lin")}:{scores.keys}:{labels.toArray()}")Some(check):Some(12):[ada, lin]:[docs, tests]두 조회는 값이 없을 수도 있으므로 Some을 반환합니다. scores.keys와
labels.toArray()는 삽입 순서를 유지합니다. 나중에 scores나
labels를 바꾸어도 이미 얻은 스냅샷은 변하지 않습니다.
안전한 조회, 변경, 실행 오류
Array의 get, indexOf, pop, removeAt은 Option을 반환합니다.
pop과 removeAt은 대상도 바꾸므로 수신자 루트가 let mut이어야
합니다. slice는 반열린 범위를 가능한 범위로 맞춘 새 배열을
반환합니다. 반면 직접 인덱싱과 잘못된 위치의 insert는 계약
위반이므로 실행 오류가 납니다.
Map의 get과 remove는 Option, containsKey는 bool을 반환합니다.
insert, clear, update는 대상을 바꿉니다. mapValues와 filter는
남은 키의 순서를 유지한 새 맵을 반환합니다.
Set의 contains와 remove는 bool을 반환합니다. add, remove,
clear는 대상을 바꾸고, union, intersection, difference는 정해진
순서의 새 집합을 반환합니다.
핵심 Array, Map, Set 연산에는 Result를 반환하는 메서드가 없습니다.
복구 가능한 외부 실패는 값을 만든 파서, 디코더, 파일 같은 작업에
속합니다. 그 Result를 처리하거나 전달한 뒤 컬렉션 연산을 적용하세요.
흔한 수정: x in map은 키 포함 여부가 아닙니다.
map.containsKey(x) 또는 x in map.keys를 사용하세요. 문자열은 배열이
아니며 .length가 없습니다. 스칼라 수가 필요하면
text.scalars().length를 사용합니다.
정확한 경계
- Map 키와 Set 원소는 재귀적으로 키로 사용할 수 있는 타입이어야 하며, 잘못된 타입은 정적으로 거부됩니다.
- 불변 바인딩을 통해 변경하면 정적 진단이 나옵니다.
- 기존 맵 값을 갱신하면 위치가 유지되고, 삭제 후 다시 넣으면 맨 뒤로 이동합니다.
- Map과 Set은 메서드를 사용한다고 범용 동등성을 얻지 않습니다.
- 콜백은 컬렉션에 명시된 순회 순서대로 호출됩니다.
컬렉션과 컴프리헨션, Null·Option·결과·실행 오류, 표준 라이브러리 개요로 이어서 살펴보세요.