녹-조각

슬라이스는 메모리 블록에 대한 포인터입니다. 슬라이스는 인접한 메모리 블록에 저장된 데이터 부분에 액세스하는 데 사용할 수 있습니다. 배열, 벡터 및 문자열과 같은 데이터 구조와 함께 사용할 수 있습니다. 슬라이스는 인덱스 번호를 사용하여 데이터 부분에 액세스합니다. 슬라이스의 크기는 런타임에 결정됩니다.

슬라이스는 실제 데이터에 대한 포인터입니다. 차용이라고도하는 함수에 대한 참조로 전달됩니다.

예를 들어 슬라이스를 사용하여 문자열 값의 일부를 가져올 수 있습니다. 슬라이스 된 문자열은 실제 문자열 개체에 대한 포인터입니다. 따라서 문자열의 시작 및 끝 인덱스를 지정해야합니다. 인덱스는 배열과 마찬가지로 0부터 시작합니다.

통사론

let sliced_value = &data_structure[start_index..end_index]

최소 인덱스 값은 0이고 최대 인덱스 값은 데이터 구조의 크기입니다. end_index는 최종 문자열에 포함되지 않습니다.

아래 다이어그램 은 9 개의 문자로 구성된 샘플 문자열 Tutorials를 보여줍니다 . 첫 번째 문자의 인덱스는 0이고 마지막 문자의 인덱스는 8입니다.

다음 코드는 문자열에서 5 자 (인덱스 4부터 시작)를 가져옵니다.

fn main() {
   let n1 = "Tutorials".to_string();
   println!("length of string is {}",n1.len());
   let c1 = &n1[4..9]; 
   
   // fetches characters at 4,5,6,7, and 8 indexes
   println!("{}",c1);
}

산출

length of string is 9
rials

스톡 콘텐츠-정수 배열 슬라이스

main () 함수는 5 개의 요소가있는 배열을 선언합니다. 그것은use_slice()함수를 사용하고 세 요소의 슬라이스 (데이터 배열을 가리킴)를 전달합니다. 슬라이스는 참조로 전달됩니다. use_slice () 함수는 슬라이스 값과 길이를 출력합니다.

fn main(){
   let data = [10,20,30,40,50];
   use_slice(&data[1..4]);
   //this is effectively borrowing elements for a while
}
fn use_slice(slice:&[i32]) { 
   // is taking a slice or borrowing a part of an array of i32s
   println!("length of slice is {:?}",slice.len());
   println!("{:?}",slice);
}

산출

length of slice is 3
[20, 30, 40]

가변 슬라이스

그만큼 &mut 키워드는 슬라이스를 변경 가능한 것으로 표시하는 데 사용할 수 있습니다.

fn main(){
   let mut data = [10,20,30,40,50];
   use_slice(&mut data[1..4]);
   // passes references of 
   20, 30 and 40
   println!("{:?}",data);
}
fn use_slice(slice:&mut [i32]) {
   println!("length of slice is {:?}",slice.len());
   println!("{:?}",slice);
   slice[0] = 1010; // replaces 20 with 1010
}

산출

length of slice is 3
[20, 30, 40]
[10, 1010, 30, 40, 50]

위의 코드는 가변 슬라이스를 use_slice () 함수에 전달합니다. 이 함수는 원래 배열의 두 번째 요소를 수정합니다.