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已编辑。