在 Rust 中,Vec
(向量)提供了多种删除元素的方法。以下是一些常用的删除方法:
-
remove
:
这是最常用的删除方法,它接受一个索引作为参数,并移除该索引处的元素,同时返回被移除的元素。所有后面的元素都会向前移动一个位置。let mut vec = vec![1, 2, 3, 4, 5]; let removed_element = vec.remove(2); // 移除并返回索引为 2 的元素 println!("Removed: {}", removed_element); // 输出: 3 println!("Vec after removal: {:?}", vec); // 输出: [1, 2, 4, 5]
-
swap_remove
:
与remove
类似,但它会先将要删除的元素与最后一个元素交换,然后再移除它。这通常比remove
更快,因为它避免了大量的数据移动。但是,它不会保持原始顺序。let mut vec = vec![1, 2, 3, 4, 5]; let removed_element = vec.swap_remove(2); // 移除并返回索引为 2 的元素,与最后一个元素交换 println!("Removed: {}", removed_element); // 输出: 3 println!("Vec after swap_removal: {:?}", vec); // 输出可能是: [1, 2, 5, 4]
-
drain
:
这个方法接受一个范围作为参数,并移除该范围内的所有元素,同时返回一个迭代器,可以遍历被移除的元素。这通常用于从一个向量中移除多个元素并立即使用它们。let mut vec = vec![1, 2, 3, 4, 5]; let drained: Vec<_> = vec.drain(1..3).collect(); // 移除索引 1 到 2(不包括 3)的元素 println!("Drained: {:?}", drained); // 输出: [2, 3] println!("Vec after drainage: {:?}", vec); // 输出: [1, 4, 5]
-
retain
:
这个方法接受一个闭包(closure)作为参数,并保留闭包返回true
的元素,移除返回false
的元素。这通常用于基于条件删除元素。let mut vec = vec![1, 2, 3, 4, 5]; vec.retain(|&x| x % 2 == 0); // 只保留偶数 println!("Vec after retention: {:?}", vec); // 输出: [2, 4]
-
truncate
:
这个方法接受一个新长度作为参数,并移除超出该长度的所有元素。这通常用于缩减向量的大小。let mut vec = vec![1, 2, 3, 4, 5]; vec.truncate(3); // 将向量大小缩减到 3 println!("Vec after truncation: {:?}", vec); // 输出: [1, 2, 3]
-
clear
:
这个方法移除向量中的所有元素,使其变为空向量。let mut vec = vec![1, 2, 3, 4, 5]; vec.clear(); // 移除所有元素 println!("Vec after clearance: {:?}", vec); // 输出: []
这些方法提供了灵活的删除策略,可以根据具体需求选择最适合的方法来删除 Vec
中的元素。