Rust 迭代器与闭包与高阶函数

it2023-05-08  69

文章目录

迭代器与闭包迭代器与闭包与高阶函数

迭代器与闭包

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|n<upper) .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|m<upper) .filter(|&m|m%2 ==0) .sum::<u32>(); println!("函数式风格写法的结果:{}",sum_of_square_even); }
最新回复(0)