C# 如何删除除LINQ中的字符串外长度相同的字符串?

C# 如何删除除LINQ中的字符串外长度相同的字符串?,c#,linq,C#,Linq,我有一个按字符串长度排序的可枚举字符串序列,所有字符串都是大写的。我如何按字母顺序排列这个序列,然后删除所有长度相同的字符串,除了LINQ中每个长度组中的一个之外 例如: ORIEW DRERE EWK OPPA LTS YT GL HF 应该是 如果将元素定义为: string[] elements = new[] { "ORIEW", "DRERE", "EWKD",

我有一个按字符串长度排序的可枚举字符串序列,所有字符串都是大写的。我如何按字母顺序排列这个序列,然后删除所有长度相同的字符串,除了LINQ中每个长度组中的一个之外

例如: ORIEW DRERE EWK OPPA LTS YT GL HF 应该是
如果将元素定义为:

string[] elements = new[]
           {
               "ORIEW",
               "DRERE",
               "EWKD",
               "OPPA",
               "LTS",
               "ERS",
               "YT",
               "GL",
               "HF"
           };
然后您可以使用:

var result = elements.OrderBy(r => r)
                    .GroupBy(r => r.Length)
                    .Select(grp => grp.First());
foreach (var item in result)
{
    Console.WriteLine(item);
}
对于输出,您可以使用:

var result = elements.OrderBy(r => r)
                    .GroupBy(r => r.Length)
                    .Select(grp => grp.First());
foreach (var item in result)
{
    Console.WriteLine(item);
}
你会回来的:

DRERE
ERS
EWKD
GL
记住,对于订单,您应该在EWKD之前获得ERS-与问题中的情况不同

您可以这样做:

var myStrings = "ORIEW DRERE EWKD OPPA LTS ERS YT GL HF".Split(' ');

var myGroups = myStrings
    .OrderBy(x => x)
    .GroupBy(x => x.Length);

var result = myGroups
    .Select(x => x.First())
    .OrderBy(x => x.Length); // Or OrderByDescending if order is important.
结果将包括:

GL 
ERS 
EWKD 
DRERE 
或使用morelinq

var res2 = list.OrderByDescending(s => s.Length)
               .ThenBy(s => s)
               .DistinctBy(s => s.Length)
               .ToList();
名单内容:

如果您输入的不是一个列表而是一个字符串,那么您可以按照


var元素=ORIEW DRERE EWKD OPPA LTS ERS YT GL HF.Split.TOCHARRAY@NickC,OP质疑我有一个按长度排序的可枚举字符串序列……我在发表我的评论后注意到了这句话。只是好奇,为什么你接受了这个答案,而另一个答案正好返回了你所期望的?@I4V我只是尝试使用第一个答案的方法,在那个分辨率上添加了更多的函数,我得到了我想要的。我对所有答案都投了赞成票,因为它们都是我可以接受的。
string input = "ORIEW DRERE EWKD OPPA LTS ERS YT GL HF";
var list = input.Split();