在List <String>

时间:2019-07-19 11:22:28

标签: c# arrays

如果我的列表为:我正在尝试在字符串列表中找到最长的字符串匹配项。

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

所以输出应该是因为此字符串包含同一列表中的所有匹配项,所以我想丢弃其余不足的匹配项:

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

更新


1->2中包含1->2->31->2->3->4,所以我想舍弃诸如1->21->2->3这样不太具体的那些,并采用最长的匹配1->2->3->4

路径将始终像1->2->3->4那样排列,而不是1->41->3

我正在尝试这样,但是我得到了enumeration yielded no results

public class Program
{
    public static void Main(string[] args)
    {
        List<(string, i)> flattenedPaths = new List<(string, i)> 
        {
                ("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);
    }

    public static IEnumerable<(string, int)> GetUniquePaths(List<(string, int)> Paths)
    {
        for (int i = 0; i < Paths.Count; i++)
        {
            bool doesMatchContain = Paths.Skip(i)
                                    .Any(x => x.Item1.Contains(Paths[i].Item1));

            if (!doesMatchContain)
                yield return Paths[i];
        }
    }
}

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

以下是您不妨尝试的一种方法。

betterData是您的现有数据,但预计会以更有用的形式显示-范围的上限和下限是整数而不是字符串。

SubstringIndexOfLastIndexOf代码很脆弱-但适用于您当前的样本数据-随时检查{{1} }等。

一旦我们有了一个设置了上限和下限的数据列表,我们就使用-1从列表中删除所有在范围内(例如2)的条目-3是之内1-4)。

还请注意,RemoveAll用于允许我们在修改列表的同时修改。有一些更奇妙的方法可以达到相同的效果-但是它们更容易出错,因此我在这里使用了笨拙但简单的方法。

betterData.ToList()

答案 1 :(得分:1)

请您尝试以下查询

<iostream>

答案 2 :(得分:-1)

如果输入正确,并且您想查找包含该字符串的最长序列,请遵循以下代码,

/^[\w\-:]+$/