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

使用LINQ搜索文件时如何按原文本顺序输出匹配的词条内容

问题原因

你当前的实现是按词条集合phrase的存储顺序逐个校验匹配,因此最终结果的顺序完全由词条在集合里的先后决定,和词条在原文中的出现顺序没有关联。

解决思路

对每个匹配成功的词条,额外记录它在原文中第一次出现的索引位置,所有匹配完成后按索引位置从小到大排序,就能得到和原文出现顺序一致的结果。

调整后代码示例

private static void GetFiles(DriveInfo disk)
{
    string[] files = Directory.GetFiles(disk.Name);
    foreach(string file in files)
    {
        string reader = File.ReadAllText(file);
        // 存储匹配到的词条和对应的起始索引
        List<(string MatchedPhrase, int StartIndex)> matchedResults = new List<(string, int)>();
        for(int a = 0; a < phrase.Count;a++)
        {
            string currentPhrase = phrase[a];
            int index = reader.IndexOf(currentPhrase);
            if(index != -1)
            {
                matchedResults.Add((currentPhrase, index));
            }
        }
        // 按词条在原文中的起始位置升序排序
        var sortedResults = matchedResults.OrderBy(x => x.StartIndex).Select(x => x.MatchedPhrase).ToList();
        // 后续直接使用sortedResults即可获得顺序正确的匹配结果
    }
}

注意事项

  • 如果存在一个词条在原文中多次出现的情况,上述逻辑会取第一次出现的位置排序,且每个词条只记录一次,和你现有逻辑的匹配规则一致。
  • 若需要保留同一词条多次出现的记录,可循环调用IndexOf查找所有出现位置,逐个存入结果集即可。
  • 如果你使用的是不支持值元组的.NET Framework低版本,可自定义存储结构或者用Dictionary<int, string>存储索引和词条的对应关系,再排序即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:39:06