任何人都可以帮我一个很好的LINQ表达式来转换另一个列表中的字符串列表,该列表只包含字符串的最短的不同公共前缀?前缀的分隔符是..
例: ["A", "A.B.D", "A", "A.B","E","F.E", "F","B.C"]
去: ["A", "E", "F", "B.C"]
删除:
谢谢!
编辑:感谢评论指出我早期方法中的错误。
为了解决这个缺点,这个查询应该可以工作:
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)