2015-06-18 18 views
8

W Rust można operować na wektorze w miejscu?Filtrowanie filtra w miejscu

Chciałbym usunąć niektóre elementy z Vec, ale vec.iter().filter().collect() tworzy nowy wektor z pożyczonymi przedmiotami.

Chciałbym zmutować oryginalny Vec bez dodatkowej alokacji pamięci (i zachować pamięć usuniętych elementów jako dodatkową pojemność wektora).

Odpowiedz

13

Jeśli chcesz usunąć elementy można użyć retain(), który usuwa elementy z wektora jeśli funkcja filtr return false:

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

Jeśli chcesz zmodyfikować elementy w miejscu istnieje map_in_place(), ale obecnie jest niestabilny, więc musisz to zrobić w sposób for x in vec.iter_mut().

+1

'map_in_place' jest dla bardzo konkretnego przypadku użycia, gdzie typy, które mapujesz są dokładnie tego samego rozmiaru. – bluss