我有一个按字符串长度排序的可枚举字符串序列(所有字符串都是大写的)。我如何按字母顺序排列这个序列,然后删除所有长度相同的字符串,除了LINQ中每个长度组中的一个字符串?
ORIEW DRERE EWKD OPPA LTS ERS YT GL HF应该是DRERE EWKD ERS GL
发布于 2014-02-20 19:46:33
如果您的元素定义为:
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);
}你会回来的:
DRERE
ERS
EWKD
GL(请记住,按照您的顺序,您应该在ERS之前得到EWKD --不像问题中的那样)
发布于 2014-02-20 19:50:50
你可以这样做:
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.result将包含:
GL
ERS
EWKD
DRERE 发布于 2014-02-20 20:08:58
var res1 = list.OrderByDescending(s => s.Length)
.ThenBy(s => s)
.GroupBy(s => s.Length)
.Select(s => s.First())
.ToList();或者使用morelinq的DistinctBy
var res2 = list.OrderByDescending(s => s.Length)
.ThenBy(s => s)
.DistinctBy(s => s.Length)
.ToList();列表的内容:
DRERE
EWKD
ERS
GL如果输入不是List<string>,而是字符串,则可以将list形成为
string input = "ORIEW DRERE EWKD OPPA LTS ERS YT GL HF";
var list = input.Split();https://stackoverflow.com/questions/21917935
复制相似问题