假設我有矢量,我只想保留偶數元素。我需要使用cloned()
和filter()
。例如:應將.cloned()放在.filter()之前或之後
fn main() {
let my_vec: Vec<i32> = vec![1,2,3,4];
let my_vec_1: Vec<i32> = my_vec.iter().cloned().filter(|&x| x % 2 == 0).collect();
println!("{:?}", my_vec_1);
let my_vec_2: Vec<i32> = my_vec.iter().filter(|&x| x % 2 == 0).cloned().collect();
println!("{:?}", my_vec_2);
}
兩個辦法工作。在filter()
後使用cloned()
似乎效率更高一點。因爲那樣我不必將迭代器的所有元素從&T
轉換爲T
,但只能轉換已經過濾的元素。在我的例子中,這是一半的元素。
但是,我似乎在filter()
之前應用了cloned()
。這裏有一個例子:method.inspect
我想,也許.cloned()
有不實現Copy
特質類型被使用過,但它似乎並沒有這樣的情況:nested vec example。另外,因爲過濾器使用FnMut(&Self::Item)
,我不認爲這應該是一個問題。
在filter()
之前使用cloned()
有什麼好處?這更多是一個風格問題嗎?如果是這樣,是否有首選風格?