C# 根据列表C中项目的第一个和最后一个字符进行区分#
我有一个字符串列表:C# 根据列表C中项目的第一个和最后一个字符进行区分#,c#,list,select,distinct,C#,List,Select,Distinct,我有一个字符串列表: "55002", "81512", "81612", "84515", "84615", "86358", "86358", "91128", "94002" 我想在列表中找到前两个字符和后两个字符相同的项目,然后从列表中删除中下两个字符的项目。在这个例子中,相同的是:81512和81612,我想删除81512,相同的是84515和84615,我想删除84515等等。你可以这样做: var input = new []{ "1234", "2345" /*...*/};
"55002",
"81512",
"81612",
"84515",
"84615",
"86358",
"86358",
"91128",
"94002"
我想在列表中找到前两个字符和后两个字符相同的项目,然后从列表中删除中下两个字符的项目。在这个例子中,相同的是:
81512
和81612
,我想删除81512
,相同的是84515
和84615
,我想删除84515
等等。你可以这样做:
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);
}
这将按文字顺序删除最后一个字符串,但它将涵盖您的情况您可以尝试以下操作:
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
更新:
我可能没有注意到groupby也应该匹配最后两个字符
如果是这样,那么:
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);
我们将按“键”分组,并在每组中取第一个最上面的键:
最低中间字符-比较哪些条目?全部的相邻?因此返回结果将是
“55002”、“81612”、“84615”、“86358”、“91128”、“94002”
?这看起来像是家庭作业。中间的字符将如何比较?它们都是整数吗?或者它们将按字符ASCII值排序?@Ivan86和由Royi Namir解决的作业,请您的老师给您最好的分数!!!这甚至不能解决问题。尝试以下输入:{“81512”、“81612”、“81613”}。这只返回81613。81612也应该在基于要求的列表中。@Yildzm85不是根据我的理解。@Yildzm85根据他的演示,他将两个字符分组,然后删除其中的一个,当排序时,其余字符取最大值。“最后相同的字符”@Yildzm85已编辑。