Rust中collect()收集三元组失败,得到嵌套元组求助
解决Rust中三元组迭代器的拆分收集问题
你遇到的问题是因为Rust标准库的collect方法默认不支持将三元组迭代器直接拆分为三个独立的集合。要解决这个问题,有两种常用方案:
方案一:使用标准库的fold手动收集
不需要额外依赖,通过fold方法逐步将每个三元组的元素分别推入对应的集合:
let (ids, receipts, tasks): (Vec<_>, Vec<_>, Vec<_>) = event.payload.records.into_iter() .map(create_task) .fold( (Vec::new(), Vec::new(), Vec::new()), |(mut ids_acc, mut receipts_acc, mut tasks_acc), (id, receipt, task)| { ids_acc.push(id); receipts_acc.push(receipt); tasks_acc.push(task); (ids_acc, receipts_acc, tasks_acc) }, );
方案二:使用itertools库的multiunzip(更简洁)
如果项目允许引入外部依赖,itertools库提供的multiunzip方法可以直接完成拆分收集:
- 先在
Cargo.toml中添加依赖:
[dependencies] itertools = "0.12"
- 然后修改代码:
use itertools::Itertools; let (ids, receipts, tasks): (Vec<_>, Vec<_>, Vec<_>) = event.payload.records.into_iter() .map(create_task) .multiunzip();
这两种方法都能将你生成的三元组迭代器拆分为三个独立的Vec,替代原来无法直接工作的collect调用。
内容的提问来源于stack exchange,提问作者Seto
相关产品推荐
相关产品推荐

