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