Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

is it possible to filter on a vector in-place?

Tags:

I'd like to remove some elements from a Vec, but vec.iter().filter().collect() creates a new vector with borrowed items.

I'd like to mutate the original Vec without extra memory allocation (and keep memory of removed elements as an extra capacity of the vector).

like image 494
Kornel Avatar asked Jun 18 '15 10:06

Kornel


1 Answers

If you want to remove elements, you can use retain(), which removes elements from the vector if the closure returns false:

let mut vec = vec![1, 2, 3, 4]; vec.retain(|&x| x % 2 == 0); assert_eq!(vec, [2, 4]); 

If you want to modify the elements in place, you have to do that in a for x in vec.iter_mut().

like image 117
eulerdisk Avatar answered Sep 28 '22 00:09

eulerdisk