LINQ表达式用于最短公共前缀

dav*_*ave 17 c# linq

任何人都可以帮我一个很好的LINQ表达式来转换另一个列表中的字符串列表,该列表只包含字符串的最短的不同公共前缀?前缀的分隔符是..

例: ["A", "A.B.D", "A", "A.B","E","F.E", "F","B.C"]

去: ["A", "E", "F", "B.C"]

删除:

  • "ABD"和"AB"因为前缀"A"已经在列表中
  • "A"因为是重复的
  • "FE"因为"F"已列入清单

谢谢!

Ahm*_*eed 2

编辑:感谢评论指出我早期方法中的错误。

为了解决这个缺点,这个查询应该可以工作:

var list = new List<string> { "A.B.D", "A", "A.B","E","F.E", "F","B.C", "B.C.D" };
var result = list.OrderBy(s => s)
                 .GroupBy(s => s[0])
                 .Select(g => g.First());

foreach (var s in result)
{
    Console.WriteLine(s);
}
Run Code Online (Sandbox Code Playgroud)

不正确的做法:

以下查询将按第一个字符对每个字符串进行分组。接下来,如果组计数有多个项目,则选择该键,否则选择单个项目。

var list = new List<string> { "A", "A.B.D", "A", "A.B", "E", "F.E", "F", "B.C" };
var result = list.GroupBy(s => s[0])
                 .Select(g => g.Count() > 1 ? g.Key.ToString() : g.Single());

foreach (var s in result)
{
    Console.WriteLine(s);
}
Run Code Online (Sandbox Code Playgroud)