我有一个字符串列表:
"55002",
"81512",
"81612",
"84515",
"84615",
"86358",
"86358",
"91128",
"94002"
我想在该列表中找到具有相同的2个第一个字符和相同的最后一个字符的项目,然后从列表中删除具有较低中间字符的项目。在此示例中,相同的是:81512
和81612
,我想删除81512
,同样是84515
和84615
,我想删除84515
等。
答案 0 :(得分:1)
你可以试试这个:
var g = new string[] {"55002", ...};
var t=g.GroupBy(f => f.Substring(0, 2))
.Select(f =>f.OrderByDescending(a =>a ).First());
结果:
55002
91128
81612
84615
86358
94002
更新:
我可能错过了那个群组也应该是最后两个角色。
如果情况如此:
var t=g.GroupBy(f => f.Substring(0, 2)+f.Substring( f.Length-2))
.Select(f =>f.OrderByDescending(a =>a ).First());
可视化:
查看此代码:
var g = new string[] {"55002",
"91128",
"81512",
"81712",
"81612",
"84516",
"84216",
"84615",
"86358",
"86358",
"94002"};
var t = g.GroupBy(f => f.Substring(0, 2) + f.Substring(f.Length - 2)).Select(f => new { key = f.Key, group = f.OrderByDescending(a => a)});
Console.Write(t);
我们要通过"键"进行分组。并在每个正确的组中取第一个:
答案 1 :(得分:0)
你可以这样做:
var input = new []{ "1234", "2345" /*...*/};
var res = input.GroupBy(x=> x.Substring(0,2)).Select(x=> x.OrderByDescending(y=>y).ToList()).ToList();
foreach(var l in res)
{
l.RemoveAt(l.Count-1);
}
这将删除文字顺序中的最后一个字符串,但它将涵盖您的情况