Rust 迭代map概述 - 操作數組中每個元素
最近打程式打到現在
真的覺得map太好用了
這一篇會先稍微講述map的用法
如果有時間會在講進階用法
Map
Map被歸類在iter下
先看看文件[1]
fn map<B, F>(self, f: F) -> Map<Self, F>
where
Self: Sized,
F: FnMut(Self::Item) -> B,
建立一個迭代器,該迭代器在每個元素呼叫閉包
簡單來說就是可以對數組中每個值做處理
實際舉一個例子
有一個數組,希望對每個數值加一
常見會這樣做
let mut num: Vec<_> = vec![1, 2, 3, 4, 5, 6];
for i in num {
num[i] += 1;
}
但透過map可以將程式碼簡化
let mut num: Vec<_> = vec![1, 2, 3, 4, 5, 6];
let mut res: Vec<_> = num.iter().map(|x| x + 1).collect();
assert_eq!(vec![2, 3, 4, 5, 6, 7], res);
第一行創建數組
第二行先將num傳入iter迭代器中
透過map將數組裡面的值+1後
透過collect重組回一個數組中
第三行則做確認
這邊有一個稍微一點點難度的題目
假設有一個數組
let words = vec!["apple", "banana", "cherry", "date"];
裡頭放的是&str
要求將所有的&str反轉
也就是呈現
["elppa", "ananab", "yrrehc", "etad"]
下方會有解答
這題通常會使用rev
rev可以將數值反向
因此這題可以這樣解
let reversed: Vec<String> = words
.iter()
.map(|word| word.chars().rev().collect())
.collect();
先使用iter將words放入迭代器
透過map對裡面的數值做處理
chars為將&str轉成字元char,並將字符反轉後透過collect蒐集成String
最後蒐集放進Vec
迭代器除了map,還有filter[2]、chain[3]、fold[4]
而map的應用也遠不止這篇文章所講的
之後在繼續把其他的心得寫上
0 comments:
張貼留言