2015-06-18 14 views
8

In Rust è possibile operare su un vettore sul posto?Vettore del filtro attivo

Vorrei rimuovere alcuni elementi da un Vec, ma vec.iter().filter().collect() crea un nuovo vettore con elementi presi in prestito.

Mi piacerebbe modificare l'originale Vec senza allocazione di memoria aggiuntiva (e mantenere la memoria degli elementi rimossi come una capacità aggiuntiva del vettore).

risposta

13

Se si desidera rimuovere gli elementi è possibile utilizzare retain(), che rimuove gli elementi dal vettore se la funzione filtro di ritorno falso:

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

Se si desidera modificare gli elementi al posto c'è map_in_place(), ma al momento è instabile, quindi devi farlo in un modo for x in vec.iter_mut().

+1

'map_in_place' è per un caso d'uso molto specifico, in cui i tipi di mappe sono esattamente della stessa dimensione. – bluss

Problemi correlati