本文簡要介紹rust語言中 std::vec::Vec.drain_filter
的用法。
用法
pub fn drain_filter<F>(&mut self, filter: F) -> DrainFilter<'_, T, F, A> where F: FnMut(&mut T) -> bool,
創建一個迭代器,它使用閉包來確定是否應刪除元素。
如果閉包返回 true,則元素被移除並生成。如果閉包返回 false,則元素將保留在向量中並且不會被迭代器產生。
使用該方法等價於以下代碼:
let mut i = 0;
while i < vec.len() {
if some_predicate(&mut vec[i]) {
let val = vec.remove(i);
// your code here
} else {
i += 1;
}
}
但是drain_filter
更容易使用。 drain_filter
也更高效,因為它可以批量回移數組的元素。
請注意,drain_filter
還允許您改變過濾器閉包中的每個元素,無論您選擇保留還是刪除它。
例子
將數組拆分為偶數和奇數,重用原始分配:
#![feature(drain_filter)]
let mut numbers = vec![1, 2, 3, 4, 5, 6, 8, 9, 11, 13, 14, 15];
let evens = numbers.drain_filter(|x| *x % 2 == 0).collect::<Vec<_>>();
let odds = numbers;
assert_eq!(evens, vec![2, 4, 6, 8, 14]);
assert_eq!(odds, vec![1, 3, 5, 9, 11, 13, 15]);
相關用法
- Rust Vec.drain用法及代碼示例
- Rust Vec.dedup_by用法及代碼示例
- Rust Vec.dedup用法及代碼示例
- Rust Vec.dedup_by_key用法及代碼示例
- Rust Vec.into_raw_parts用法及代碼示例
- Rust Vec.resize用法及代碼示例
- Rust Vec.swap_remove用法及代碼示例
- Rust Vec.is_empty用法及代碼示例
- Rust Vec.reserve_exact用法及代碼示例
- Rust Vec.retain_mut用法及代碼示例
- Rust Vec.try_reserve_exact用法及代碼示例
- Rust Vec.new_in用法及代碼示例
- Rust Vec.insert用法及代碼示例
- Rust Vec.retain用法及代碼示例
- Rust Vec.with_capacity用法及代碼示例
- Rust Vec.from_raw_parts用法及代碼示例
- Rust Vec.into_boxed_slice用法及代碼示例
- Rust Vec.reserve用法及代碼示例
- Rust Vec.shrink_to_fit用法及代碼示例
- Rust Vec.as_mut_slice用法及代碼示例
- Rust Vec.set_len用法及代碼示例
- Rust Vec.as_ptr用法及代碼示例
- Rust Vec.capacity用法及代碼示例
- Rust Vec.into_raw_parts_with_alloc用法及代碼示例
- Rust Vec.leak用法及代碼示例
注:本文由純淨天空篩選整理自rust-lang.org大神的英文原創作品 std::vec::Vec.drain_filter。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。