Метод dedup_by
Метод dedup_by удаляет из вектора
последовательные повторяющиеся элементы,
которые удовлетворяют заданному условию.
Метод принимает замыкание, которое получает
два аргумента - ссылки на соседние элементы.
Если замыкание возвращает true, то
второй элемент удаляется. Если false -
оба элемента остаются на своих местах.
Важно: метод удаляет только соседние
элементы, поэтому вектор предварительно
нужно отсортировать.
Синтаксис
vec.dedup_by(|a, b| condition)
Пример
Давайте удалим соседние элементы вектора, которые равны по модулю. Сначала отсортируем вектор по абсолютному значению:
fn main()
{
let mut vec = vec![-1, 1, -2, 2, -3, 3];
vec.sort_by(|a, b| a.abs().cmp(&b.abs()));
vec.dedup_by(|a, b| a.abs() == b.abs());
println!("{:?}", vec);
}
Результат выполнения кода:
[-1, -2, -3]
Пример
Давайте удалим соседние элементы вектора, длина которых совпадает:
fn main()
{
let mut vec = vec!["ab", "cd", "efg", "hi", "jkl"];
vec.sort_by(|a, b| a.len().cmp(&b.len()));
vec.dedup_by(|a, b| a.len() == b.len());
println!("{:?}", vec);
}
Результат выполнения кода:
["ab", "efg"]
Смотрите также
-
метод
dedup,
который удаляет соседние повторяющиеся элементы -
метод
dedup_by_key,
который удаляет соседние элементы с одинаковым ключом -
метод
sort,
который сортирует элементы вектора -
метод
retain,
который сохраняет только элементы, удовлетворяющие условию