Rust - Vector의 요소 제거 방법 (remove, retain, drain)

Rust에서 배열(Array)처럼 사용하는 Vector의 요소 제거 방법을 소개합니다.

1. 특정 Index 요소 제거

remove(index)는 벡터에서 인자로 전달된 index에 해당하는 요소를 제거합니다.

  • vector에서 요소가 제거되기 때문에 vec는 mut으로 선언
  • remove()로 요소를 삭제하면 삭제된 값이 리턴됨
fn main() {
    let mut vec = vec![1, 2, 3, 4, 5];

    // Index 2의 요소 삭제
    let index = 2;
    let removed = vec.remove(index);

    println!("vec: {:?}", vec);
    println!("removed: {}", removed);
}

Output:

vec: [1, 2, 4, 5]
removed: 3

2. 특정 조건에 해당하는 요소들 제거

retain(함수)는 함수의 리턴 값이 true인 요소들은 제거하지 않고, false인 요소들만 제거합니다.

함수는 요소의 값이 인자로 전달되며, true 또는 false를 리턴하도록 구현해야 합니다.

  • |&x| x < 5는 요소 값이 5 미만일 때 true를 리턴하여 벡터에서 삭제되지 않음
fn main() {
    let mut vec = vec![5, 2, 8, 1, 7, 4, 3, 9];

    // 5보다 작은 요소들을 제외하고 모두 제거
    vec.retain(|&x| x < 5);

    println!("vec: {:?}", vec);
}

Output:

vec: [2, 1, 4, 3]

3. 특정 Index 범위의 요소들 모두 제거

drain(range)는 range의 Index 범위의 요소들을 모두 제거합니다.

  • range는 1..4 처럼 입력할 수 있으며, [1, 4) 범위(1은 포함하고 4는 포함하지 않는)의 인덱스 요소들을 제거
  • drain()으로 제거된 요소들은 collect()를 이용하여 Vector로 리턴할 수 있음
fn main() {
    let mut vec = vec![1, 2, 3, 4, 5, 6];

    // Index 1 ~ 3의 요소들 제거
    let range = 1..4;
    let removed: Vec<_> = vec.drain(range).collect();

    println!("vec: {:?}", vec);
    println!("removed: {:?}", removed);
}

Output:

vec: [1, 5, 6]
removed: [2, 3, 4]
Loading script...

Related Posts

codechachaCopyright ©2019 codechacha