Метод swap_remove
Метод swap_remove удаляет элемент из вектора
по указанному индексу. В отличие от метода remove,
который сдвигает все последующие элементы влево,
swap_remove заменяет удаляемый элемент
последним элементом вектора, а затем уменьшает
длину вектора на единицу. Параметром метод принимает
индекс элемента, который нужно удалить. Метод
возвращает удалённый элемент.
Такой подход позволяет выполнить удаление за
константное время O(1), тогда как remove
работает за линейное время O(n). Однако
следует учитывать, что порядок элементов в векторе
после вызова swap_remove может измениться.
Метод паникует, если переданный индекс выходит за пределы вектора.
Синтаксис
vec.swap_remove(index)
Пример
Давайте удалим элемент с индексом 1
из вектора vec![1, 2, 3, 4, 5]:
fn main()
{
let mut vec = vec![1, 2, 3, 4, 5];
let res = vec.swap_remove(1);
println!("Removed: {}", res);
println!("{:?}", vec);
}
Результат выполнения кода:
Removed: 2
[1, 5, 3, 4]
Как видно из результата, элемент 2 был удалён,
а на его место встал последний элемент вектора -
5.
Пример
Давайте удалим последний элемент вектора
vec!["a", "b", "c", "d", "e"]:
fn main()
{
let mut vec = vec!["a", "b", "c", "d", "e"];
let res = vec.swap_remove(4);
println!("Removed: {}", res);
println!("{:?}", vec);
}
Результат выполнения кода:
Removed: e
["a", "b", "c", "d"]
Если удаляется последний элемент, то вектор просто уменьшается на один элемент, и порядок остальных элементов не меняется.
Пример
Давайте удалим элемент с индексом 0
из вектора vec![1, 2, 3, 4, 5]:
fn main()
{
let mut vec = vec![1, 2, 3, 4, 5];
let res = vec.swap_remove(0);
println!("Removed: {}", res);
println!("{:?}", vec);
}
Результат выполнения кода:
Removed: 1
[5, 2, 3, 4]
Первый элемент 1 был удалён, а его место
занял последний элемент 5.