当前位置: 首页 > news >正文

Rust_2025:阶段1:day6.1 collect补充 ,迭代器补充 ,闭包,Hashmap搜索指定值的个数,合并迭代器

collect

  • 如果你写 collect::<Vec<Result<T, E>>>(),它会把迭代器里的每个元素(Result)都收集到一个 Vec 里,得到的是 Vec<Result<T, E>>。
    如果你写 collect::<Result<Vec, E>>(),它会尝试把所有 Ok(T) 收集到 Vec 里,只要遇到一个 Err(E) 就直接返回这个 Err,得到的是 Result<Vec, E>。
    Option 也是一样:

  • collect::<Vec<Option>>() 得到 Vec<Option>

  • collect::<Option<Vec>>() 得到 Option<Vec>

fn result_with_list() -> Result<Vec<i32>, DivisionError> {let numbers = vec![27, 297, 38502, 81];numbers.into_iter().map(|n| divide(n, 27)).collect()
}fn list_of_results() -> Vec<Result<i32, DivisionError>> {let numbers = vec![27, 297, 38502, 81];numbers.into_iter().map(|n| divide(n, 27)).collect()
}

迭代器补充

  1. (1…=num)是迭代器

闭包

Rust 中常见的闭包函数有:

map:对迭代器每个元素应用闭包(返回迭代器)

let v = vec![1, 2, 3];let doubled: Vec<_> = v.iter().map(|x| x * 2).collect();

filter:用闭包筛选元素(返回迭代器)

let v = vec![1, 2, 3, 4];let even: Vec<_> = v.into_iter().filter(|x| x % 2 == 0).collect();

fold:用闭包累积结果(返回累积值)

let sum = (1..=4).fold(0, |acc, x| acc + x);

for_each:对每个元素执行闭包(不返回)

v.iter().for_each(|x| println!("{}", x));

find:用闭包查找元素(返回第一个查到元素的Some)

let first_even = v.iter().find(|&&x| x % 2 == 0);

这些都是迭代器常用的闭包用法。

Hashmap

filter() + count()计算指定元素值的个数

fn count_iterator(map: &HashMap<String, Progress>, value: Progress) -> usize {// map is a hashmap with String keys and Progress values.// map = { "variables1": Complete, "from_str": None, ... }map.values().filter(|&&x| x == value).count()
}
  1. 解释:map是对哈希表的引用。但也能调用values()返回对哈希表值的引用迭代器。
  2. filter()+count()是搜索哈希表中指定值的个数的经典用法。
  3. 闭包中有两层引用的原因是,map本身是引用,value又一层引用

合并迭代器

flat_map()

fn count_collection_iterator(collection: &[HashMap<String, Progress>], value: Progress) -> usize {// collection is a slice of hashmaps.// collection = [{ "variables1": Complete, "from_str": None, ... },//     { "variables2": Complete, ... }, ... ]collection.iter().flat_map(|map| map.values()).filter(|&&x| x == value).count()
}
  • flat_map是用来合并迭代器的
  • flat.map是用来合并迭代器的,因此他的闭包函数只能是迭代器返回值。
http://www.dtcms.com/a/392797.html

相关文章:

  • ESP32- 项目应用2 音乐播放器之音响驱动 #2
  • Datawhale25年9月组队学习:llm-preview+Task2:大模型使用
  • Agent记忆:Memvid、Memary、MemoryOS
  • 《主流PLC品牌型号大全解析》,电气设计时PLC应该怎么选
  • 从92到102,一建实务突破之路:坚持与自我超越
  • 探索C语言中字符串长度的计算方法
  • 使用node框架 Express开发仓库管理系统练习项目
  • 网络系统管理
  • 【Vue3 ✨】Vue3 入门之旅 · 第四篇:组件的创建与传递数据
  • PHP魔法函数和超全局数组介绍——第一阶段
  • 深入剖析“惊群效应”:从Java的notifyAll到epoll的解决方案
  • 鸿蒙应用统一埋点体系设计
  • Rust_2025:阶段1:day6.2 Box ,Cow ,Rc ,Refcell ,Arc,线程(join(),lock(),子线程与主线程通信
  • GD32VW553-IOT V2【微秒延迟时间实现方法】
  • html5是移动设备玖写口吧目盖由
  • 华为全联接大会 2025:跃升行业智能化
  • 采用Mayavi对BEV相机外参进行可视化
  • 算法高频题-动态规划
  • 第七篇:强类型枚举:enum class - 彻底解决传统枚举的缺陷
  • 汽车中的轻量化 AI 算法:驶向智能出行新未来
  • 《根治开放世界坐骑卡顿:从时钟同步到负载均衡的架构级解决方案》
  • 在线预览Office文件全攻略
  • Cordova打包Vue项目成APK——真机调试
  • DNS协议、ICMP协议、NAT技术
  • HTML5 基础与常用标签
  • 2023 CCPC Online vp补题-D
  • 阿勒泰羊区域公用品牌在京发布 多方合力打造“雪都牧歌·天选之羊”产业新生态
  • 【分布式技术】Redis 双集群主备部署方案” 的详细说明
  • (信号)频谱泄露和频谱混叠
  • 蓝桥杯2024年第15届B组试题D