표준 라이브러리와 런타임

컬렉션 연산

Array, Map, Set에서 조회, 순서를 보존하는 스냅샷, 새 값 변환, 명시적 변경 연산을 선택합니다.

수행하려는 작업 목적에 맞춰 적절한 컬렉션을 선택하세요. 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 함께 사용하기

TOPAZ
let 과제들 = ["draft", "check", "ship"]
let 선택 = 과제들.get(1)

let mut 점수들: Map<string, int> = Map.new()
점수들.insert("ada", 10)
점수들.insert("lin", 12)

let mut 레이블들 = Set.of("docs")
레이블들.add("tests")

print("{선택}:{점수들.get("lin")}:{점수들.keys}:{레이블들.toArray()}")
출력
Some(check):Some(12):[ada, lin]:[docs, tests]

두 조회 연산은 값이 없을 수도 있는 위치에 접근하므로 Some을 반환합니다. 점수들.keys레이블들.toArray()는 삽입 순서를 유지합니다. 나중에 점수들이나 레이블들을 변경하더라도 이미 생성된 스냅샷은 변하지 않습니다.

안전한 조회, 변경, 실행 오류

Array의 get, indexOf, pop, removeAt 메서드는 Option을 반환합니다. popremoveAt은 대상 자체를 변경하므로 수신자 루트가 let mut으로 선언되어 있어야 합니다. slice는 반열린 범위를 유효한 범위로 맞춘 새 배열을 반환합니다. 반면 직접 인덱싱과 잘못된 위치에 대한 insert 호출은 계약 위반이므로 런타임 오류가 발생합니다.

Map의 getremoveOption을 반환하고, containsKeybool을 반환합니다. insert, clear, update는 대상을 직접 변경합니다. mapValuesfilter는 남은 키의 순서를 유지하는 새 맵을 반환합니다.

Set의 containsremovebool을 반환합니다. 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·결과·fault, 표준 라이브러리 개요로 이어서 살펴보세요.