Rust 迭代器與閉包與高階函式
阿新 • • 發佈:2020-12-25
迭代器與閉包
fn main() {
let vec_1 = vec![1, 2, 3,4,5];
let vec_2 = vec!["a","b","c","d","e"];
//對vec的`iter()`舉出`i32`,(通過用`x`匹配)把它解構成`i32`。
//對vec的`into_iter()`舉出`i32`型別。無需解構。
println!("是否有能整除2的數:{}",vec_1.iter().any(|x| x%2 ==0));
println!("查詢該向量中是否有c ={}",vec_2.into_iter().any(|x|x==String::from('c')));
//對陣列的`iter()`與`into_iter()`都是舉出`i32`。
let array1 = [1,2,3,4,5,6];
let array2 = [11,12,13,14,15,16];
println!("是否有能被3整除的數:{}",array1.iter().any(|x|x%3 ==0));
println!("是否有能被5整除的數:{}",array2.into_iter().any(|x|x%5 ==0));
// 查詢迭代器(與iter().any()迭代器類似),返回Option()。
println!("查詢能被3整除的數:{:?}",array1.iter().find(|x|x%3 ==0)); //返回第一個符合條件的數
}
// 是否有能整除2的數:true
// 查詢該向量中是否有c =true
// 是否有能被3整除的數:true
// 是否有能被5整除的數:true
// 查詢能被3整除的數:Some(3)
如下示例:優雅的函式鏈式呼叫
fn is_odd(n:u32) - bool {
1 == n%2
}
fn main() {
println!("求1000以下所有奇數平方和。");
let upper = 1000u32;
let mut acc = 0u32;
for n in 0..{
let n_square = n*n;
if n_square =upper{
break;
}else if is_odd(n_square){
acc += n_square;
}
}
println!("命令式風格寫法的結果:{}",acc);
let sum_of_square_odd:u32 =
(0..).map(|n|n*n)
.take_while(|n|nupper)
.filter(|n|is_odd(n))
.fold(0, |acc2,i|acc2 + i);
println!("函式式風格寫法的結果:{}",sum_of_square_odd);
println!("求1000以下所有偶數平方和。");
let sum_of_square_even:u32 =
(0..).map(|m|m * m)
.take_while(|m|mupper)
.filter(|m|m%2 ==0)
.sum::u32();
println!("函式式風格寫法的結果:{}",sum_of_square_even);
}