기타 슬라이스
Coddy Rust 여정의 Logic & Flow 섹션에 포함된 레슨 — 66개 중 57번째.
문자열 슬라이스는 매우 유용하지만, 슬라이싱은 문자열에만 국한되지 않습니다. Rust의 슬라이스 개념은 모든 요소 시퀀스로 확장되어, 소유권을 가져오지 않고도 컬렉션을 다룰 수 있는 강력한 도구가 됩니다.
문자열에서 배웠던 것과 동일한 구문을 사용하여 배열과 벡터로부터 슬라이스를 생성할 수 있습니다. 예를 들어, 숫자 배열이 있는 경우 그 일부 또는 전체를 참조하는 슬라이스를 생성할 수 있습니다:
let numbers = [1, 2, 3, 4, 5];
let slice: &[i32] = &numbers[1..4]; // 결과는 [2, 3, 4]입니다
let full_slice: &[i32] = &numbers; // 전체 배열을 참조합니다동일한 원리가 벡터에도 적용됩니다. 데이터를 이동하거나 복사하지 않고 데이터의 일부를 작업하기 위해 벡터에서 슬라이스를 생성할 수 있습니다:
let mut vec = vec![10, 20, 30, 40];
let vec_slice: &[i32] = &vec[0..2]; // 이것은 [10, 20]을 제공합니다챌린지
쉬움세 개의 입력을 받게 됩니다. 첫 번째 입력은 쉼표로 구분된 숫자 목록입니다. 두 번째 입력은 슬라이스를 생성하기 위한 시작 및 끝 인덱스를 나타내는 공백으로 구분된 두 숫자입니다. 세 번째 입력은 슬라이스에서 액세스할 인덱스를 나타내는 단일 숫자입니다.
쉼표로 구분된 숫자들로부터 벡터를 생성한 다음, 지정된 범위를 사용하여 슬라이스를 생성하세요. 슬라이스에서 주어진 인덱스에 있는 요소에 액세스하여 출력하세요.
요구 사항:
- 첫 번째 입력(쉼표로 구분된 숫자)을 읽고 공백을 제거합니다.
- 입력을 쉼표로 분할하고 각 숫자를
i32로 파싱합니다. - 이 숫자들로 벡터를 생성합니다.
- 두 번째 입력(공백으로 구분된 두 숫자)을 읽고 공백을 제거합니다.
- 두 번째 입력을 공백으로 분할하여 시작 및 끝 인덱스를 가져옵니다.
- 두 인덱스를
usize로 파싱합니다. - 범위 구문
&vec[start..end]을 사용하여 벡터로부터 슬라이스를 생성합니다. - 세 번째 입력(액세스할 인덱스)을 읽고 공백을 제거합니다.
- 인덱스를
usize로 파싱합니다. - 슬라이스에서 지정된 인덱스의 요소에 액세스합니다.
- 액세스한 요소를 출력합니다.
입력:
- 첫 번째 줄: 쉼표로 구분된 숫자 (예:
10,20,30,40,50) - 두 번째 줄: 공백으로 구분된 두 숫자 (예:
1 4) - 세 번째 줄: 인덱스 번호 (예:
2)
출력:
- 슬라이스의 지정된 인덱스에 있는 요소
치트 시트
슬라이스는 문자열뿐만 아니라 배열과 벡터에서도 생성할 수 있습니다. 슬라이스는 소유권을 가져오지 않고 컬렉션의 일부를 참조합니다.
배열에서 슬라이스 생성하기:
let numbers = [1, 2, 3, 4, 5];
let slice: &[i32] = &numbers[1..4]; // [2, 3, 4]를 참조합니다
let full_slice: &[i32] = &numbers; // 전체 배열을 참조합니다벡터에서 슬라이스 생성하기:
let mut vec = vec![10, 20, 30, 40];
let vec_slice: &[i32] = &vec[0..2]; // [10, 20]을 참조합니다슬라이스는 문자열 슬라이스와 동일한 범위 구문을 사용하며, 데이터를 이동하거나 복사하지 않고 데이터의 일부를 작업할 수 있게 해줍니다.
직접 해보기
use std::io::{self, BufRead};
fn main() {
let stdin = io::stdin();
let mut lines = stdin.lock().lines();
// 첫 번째 입력 읽기 (쉼표로 구분된 숫자들)
let first_input = lines.next().unwrap().unwrap();
// 두 번째 입력 읽기 (시작 및 끝 인덱스)
let second_input = lines.next().unwrap().unwrap();
// 세 번째 입력 읽기 (접근할 인덱스)
let third_input = lines.next().unwrap().unwrap();
// TODO: 아래에 코드를 작성하세요
// 쉼표로 구분된 숫자들을 파싱하여 벡터 생성
// 시작 및 끝 인덱스 파싱
// 벡터로부터 슬라이스 생성
// 슬라이스에서 지정된 인덱스의 요소에 접근
// 결과 출력
// println!("{}", result);
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.