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

无法在List<String>中找到最长匹配字符串的技术求助

问题排查与解决方案

我看到你遇到的问题了,咱们一步步拆解分析:

1. 核心问题:类型不匹配导致的无结果

你的GetUniquePaths方法返回的是IEnumerable<(string, int)>(字符串和索引的元组),但在Main方法里你把它赋值给了IEnumerable<string>类型的变量uniquePaths。C#不会自动将元组转换为字符串,这不仅会触发编译错误,也是你得到"enumeration yielded no results"的核心原因——类型不兼容导致后续根本无法正确遍历到有效数据。

2. 逻辑上的潜在缺陷

当前的检查条件Paths.Skip(i).Any(x => x.Item1.Contains(Paths[i].Item1))在你的测试案例中看似能工作,但存在两个隐患:

  • Contains方法的误判风险:如果存在类似"1->20"这样的路径,它会错误地被判定为包含"1->2",但这显然不属于同一组路径,不符合你的需求。
  • 检查范围不严谨:Skip(i)只检查当前元素之后的项,虽然你的输入是按路径长度递增排序的,但逻辑上没有覆盖所有可能的情况,不够健壮。

修正后的代码

我们调整代码解决类型问题,同时优化匹配逻辑(用前缀检查代替简单包含,更贴合路径的有序特性):

public class Program {
    public static void Main(string[] args) {
        List<(string Path, int Index)> flattenedPaths = new List<(string, int)> {
            ("1->2", 0),
            ("1->2->3", 1),
            ("1->2->3->4", 2),
            ("5->6", 3),
            ("5->6->7", 4),
            ("5->6->7->8", 5)
        };
        // 类型匹配后,直接获取结果并输出
        IEnumerable<string> uniquePaths = GetUniquePaths(flattenedPaths);
        foreach (var path in uniquePaths)
        {
            Console.WriteLine(path);
        }
    }

    public static IEnumerable<string> GetUniquePaths(List<(string Path, int Index)> paths) {
        foreach (var currentPath in paths)
        {
            // 检查是否存在更长的同组路径(当前路径是其前缀)
            bool hasLongerMatchingPath = paths.Any(other => 
                other != currentPath && 
                other.Path.StartsWith(currentPath.Path + "->"));
            
            // 没有更长匹配路径时,保留当前路径
            if (!hasLongerMatchingPath)
            {
                yield return currentPath.Path;
            }
        }
    }
}

代码说明

  • 类型修正:GetUniquePaths现在直接返回IEnumerable<string>,和Main中的变量类型完全匹配,避免了类型转换错误。
  • 前缀检查优化:使用StartsWith(currentPath.Path + "->")确保只有真正的后续路径(比如"1->2->3"是"1->2"的延伸)才会被判定为包含,彻底避免了Contains的误判情况。
  • 逻辑简化:用foreach循环替代for循环,代码可读性更强,同时覆盖了所有路径的检查范围。

运行这段代码后,你会得到预期的输出:

1->2->3->4
5->6->7->8

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:28:32