Rust - 벡터 나누기, 자르기

러스트에서 1개의 벡터를 두개로 분리하는 방법에 대해서 알아보겠습니다.

1. split_off()를 이용한 방법

v1.split_off(N)은 [0, N] 범위(Index 0은 포함하고 N은 포함하지 않는)의 벡터를 잘라서 두개로 분리합니다.

  • [0, N] 범위의 요소들은 v1에 남겨지고, 나머지는 새로운 벡터에 추가되어 리턴됨
  • v1 객체의 데이터 변경이 있기 때문에 mut으로 선언
fn main() {
    let mut v1 = vec![1, 2, 3, 4, 5, 6];
    let v2 = v1.split_off(3);

    println!("v1: {:?}", v1);
    println!("v2: {:?}", v2);
}

Output:

v1: [1, 2, 3]
v2: [4, 5, 6]

2. drain()을 이용한 방법

v1.drain(N..).collect()는 v1에서 Index N에서 마지막 요소까지의 요소들을 v1에서 제거하고 새로운 벡터로 이동시킵니다. 그리고 벡터 객체를 리턴합니다.

  • v1 객체의 데이터 변경이 있기 때문에 mut으로 선언
fn main() {
    let mut v1 = vec![1, 2, 3, 4, 5, 6];

    let v2: Vec<_> = v1.drain(3..).collect();
    println!("v1: {:?}", v1);
    println!("v2: {:?}", v2);
}

Output:

v1: [1, 2, 3]
v2: [4, 5, 6]

3. split_at()를 이용한 방법

v1.split_at(N)은 [0, N] 범위(Index 0은 포함하고 N은 포함하지 않는)의 벡터를 잘라서 두개의 배열로 분리합니다.

  • 아래 예제에서 [0, N] 범위의 요소들은 새로운 배열로 left에 리턴되고, 나머지는 right에 리턴됨
  • split_at()으로 분리되는 객체는 벡터가 아닌 배열
fn main() {
    let v = vec![1, 2, 3, 4, 5, 6];
    let (left, right) = v.split_at(3);

    println!("v: {:?}", v);
    println!("left: {:?}", left);
    println!("right: {:?}", right);
}

Output:

v: [1, 2, 3, 4, 5, 6]
left: [1, 2, 3]
right: [4, 5, 6]

4. chunks()를 이용한 방법

v1.chunks(N).collect()은 벡터 v1에서 N개씩 분리하여 각각의 배열로 저장하고, 분리된 배열들을 벡터에 저장하여 리턴합니다.

아래 예제에서 v2의 타입은 Vec<&[i32]>가 됩니다.

fn main() {
    let mut v1 = vec![1, 2, 3, 4, 5, 6];

    let v2: Vec<_> = v1.chunks(2).collect();
    println!("v1: {:?}", v1);
    println!("v2: {:?}", v2);
}

Output:

v1: [1, 2, 3, 4, 5, 6]
v2: [[1, 2], [3, 4], [5, 6]]
Loading script...

Related Posts

codechachaCopyright ©2019 codechacha