You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust中如何过滤Vector并返回匹配元素的索引而非值?

获取Vec中匹配过滤条件的元素索引的Rust实现

你可以借助迭代器的enumerate()方法实现需求:该方法会将迭代器的输出包装为(元素索引, 元素值)的元组,你只需要在完成条件过滤后,单独取出索引值收集即可。
参考代码:

let vec: Vec<u32> = vec![1, 3, 4, 7, 9, 10, 12];
let matched_indexes: Vec<usize> = vec
    .iter()
    .enumerate()
    .filter(|(_, val)| *val % 3 == 0)
    .map(|(idx, _)| idx)
    .collect();

println!("{:?}", matched_indexes);
// 输出结果:[1, 4, 6]

实现细节说明:

  • 此处使用iter()而非原示例中的into_iter():into_iter()会拿走原Vec的所有权,将元素move出原集合,如果你后续还要使用原Vec,用iter()做不可变借用即可;如果不需要保留原Vec,替换为into_iter()也能正常运行。另外你给出的原有过滤示例存在变量名笔误:定义的Vec变量名为vec,调用迭代器时写的是v.into_iter(),直接运行会报错。
  • enumerate()返回的索引固定为usize类型,是Rust集合索引的标准类型。
  • 用iter()迭代时,闭包里拿到的val是元素的引用,做数值判断前需要用*解引用。
  • 如果你需要同时拿到匹配元素的索引和值,去掉末尾的map步骤,直接将结果收集为Vec<(usize, &u32)>类型即可。

内容的提问来源于stack exchange,提问作者Luiz Martins

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 14:51:11