2015-06-18 13 views
8

Trong Rust, có thể vận hành trên một véc-tơ tại chỗ không?Bộ lọc vector tại chỗ

Tôi muốn xóa một số yếu tố khỏi một số Vec, nhưng vec.iter().filter().collect() tạo một vectơ mới với các mặt hàng đã mượn.

Tôi muốn thay đổi bản gốc Vec mà không cần cấp phát bộ nhớ bổ sung (và giữ bộ nhớ của các phần tử đã xóa dưới dạng dung lượng bổ sung của vectơ).

Trả lời

13

Nếu bạn muốn loại bỏ yếu tố mà bạn có thể sử dụng retain(), mà loại bỏ các yếu tố từ các vector nếu chức năng lọc trả về false:

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

Nếu bạn muốn thay đổi các yếu tố tại chỗ có map_in_place() nhưng hiện tại không ổn định, vì vậy bạn phải thực hiện điều đó theo cách for x in vec.iter_mut().

+1

'map_in_place' là dành cho trường hợp sử dụng rất cụ thể, trong đó các loại bạn ánh xạ chính xác có cùng kích thước. – bluss

Các vấn đề liên quan