문자열과 컬렉션
선택한 언어나 버전에는 이 주제가 없어 같은 영역의 시작 페이지를 표시합니다.
여러 값을 순서대로 보관하려면 Vec<T>를 사용합니다. 텍스트를 나누는 함수는 std.string에서 찾을 수 있습니다. 다음을 collections.xen으로 저장하세요.
use std.string as text;
fn main() { let words = text.split_ascii_whitespace("red green blue"); println(words.get(1)); println("한".len()); let mut scores: Vec<Int> = []; scores.push(10); scores.push(20); scores[0] = 11; println(scores); for index in 0..scores.len() { println(scores.get(index)); }}xen check collections.xenxen run collections.xengreen3[11, 20]1120문자열
섹션 제목: “문자열”String은 바꿀 수 없는 바이트열입니다. +로 이어 붙이면 새 문자열이 만들어집니다. len()은 글자 수가 아닌 바이트 수입니다. 예제의 "한"은 UTF-8에서 3바이트입니다. 글자 단위 색인이나 문자열 변경 문법은 없습니다.
큰따옴표 안에서는 \n, \t, \r, \", \\를 사용할 수 있습니다. 문자열은 UTF-8인지 자동으로 검사하지 않으므로 파일의 원래 바이트를 보존합니다. 바이트 위치로 자르는 작업은 한 글자의 중간을 자를 수 있습니다.
std.string.split_ascii_whitespace는 공백·탭·줄바꿈 등 ASCII 공백을 기준으로 나누고 빈 항목을 만들지 않습니다. split_byte(text, u8(44))는 쉼표 바이트 하나를 기준으로 나누며 빈 항목도 남깁니다. 이는 따옴표를 해석하는 CSV 파서가 아닙니다. 검색과 부분 추출은 표준 라이브러리를 참고하세요.
[10, 20]처럼 만들고, 빈 벡터에는 Vec<Int>처럼 원소 타입을 적습니다. 색인은 0부터 시작합니다.
| 작업 | 쓰는 방법 |
|---|---|
| 원소 수 | scores.len() |
| 읽기 | scores[0] 또는 scores.get(0) |
| 추가·변경 | scores.push(30), scores.set(0, 12) |
| 마지막 원소 꺼내기 | scores.pop() |
| 이전 원소를 반환하며 교체 | scores.replace(0, 12) |
| 두 원소 교환 | scores.swap(0, 1) |
변경 작업에는 let mut이 필요합니다. 범위 밖 접근이나 빈 벡터의 pop()은 실행 오류입니다. 접근 전에 길이를 확인하세요. get()도 실패를 Option으로 돌려주지 않습니다. 벡터에는 서로 같은 타입의 값만 넣습니다. 참조·Slice·Ptr는 벡터 원소로 사용할 수 없습니다.
색인으로 순서대로 처리하기
섹션 제목: “색인으로 순서대로 처리하기”for index in 0..scores.len()은 0부터 마지막 색인까지 방문합니다. scores.get(index)로 현재 값을 읽어 합계를 내거나 출력할 수 있습니다. 빈 벡터에서는 반복문을 실행하지 않으므로 0번 원소를 무조건 읽을 필요가 없습니다.
함수에 Vec<Int>를 값으로 전달하면 독립 사본을 사용하므로 함수 안에서 바꾼 내용이 호출자의 벡터를 바꾸지는 않습니다. 지금은 계산 결과를 반환해 사용하세요. 원본을 직접 바꾸거나 복사를 피할 필요가 생기면 고급 과정의 스코프 모드와 복사·이동·참조를 읽으세요.
슬라이스와 변환 이터레이터는 슬라이스와 이터레이터에서 다룹니다. 여기서는 문자열을 나누고 벡터에 보관해 범위 반복으로 처리할 수 있으면 충분합니다.