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

如何在Rust迭代器中获取索引以实现带行号的文本搜索?

Rust迭代器实现带行号的grep搜索

直接用迭代器的enumerate()方法就能解决你的问题,它可以给每个行元素添加上索引,完全不需要在collect()里做特殊操作,步骤如下:

  • 先看教程里的基础迭代器写法:
fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
    contents
        .lines()
        .filter(|line| line.contains(query))
        .collect()
}
  • 修改成带行号的版本,只需要插入enumerate()适配器:
fn search_with_line_numbers<'a>(query: &str, contents: &'a str) -> Vec<(usize, &'a str)> {
    contents
        .lines()
        .enumerate() // 给每个行元素添加从零开始的索引,返回(index, line)元组
        .filter(|(_index, line)| line.contains(query)) // 过滤时忽略索引,只检查行内容
        .map(|(index, line)| (index + 1, line)) // 把索引转成从1开始的实际行号
        .collect()
}
  • 调用后遍历结果输出的示例:
let results = search_with_line_numbers("rust", contents);
for (line_num, line) in results {
    println!("{}: {}", line_num, line);
}

enumerate()是Rust迭代器的标准适配器,专门用来生成带索引的元素序列,完全适配你需要的带行号搜索场景,不需要绕到collect()里去处理索引。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 01:42:50