我想从字符串数组列表中选择前5个字符,
List<string> strDetailIDList = new List<string>();
foreach(DataRow row in ds.Tables[0].Rows)
{
strDetailIDList.Add(row.ToString());
}
str=strDetailIDList.ToArray();现在字符串包含如下列表
FOCMM001
FOCMM002
FOCMM003
FOCMM004
FOCMM005
FOCMM006
FOCSM013
FOCSM014
FOCSM015
FOCSM016
FOCSM017
FOCSM018
FOCSM019
SC1LN001
SC1LN002
SC1LN003
SC1LN004
SC1LN005
SC1LN006 从该列表中,我要选择前5个字符,并计算FOCMM-6、FOCSM-6、SC!LN-6。请给我一些建议。
发布于 2012-07-21 16:20:38
听起来你想要这样的东西:
var counts = list.GroupBy(x => x.Substring(0, 5))
.Select(g => new { Prefix = g.Key, Count = g.Count() });
foreach (var value in counts)
{
Console.WriteLine("{0} - {1}", value.Prefix, value.Count);
}发布于 2012-07-21 16:42:53
如果您想在标签中显示,那么只需使用以下命令更改ConsoleWriteLine:
foreach (var value in counts)
{
label1.Text += string.Format(("{0} - {1}\r\n", value.Prefix, value.Count));
}如果您只想在一行中显示,请从上面的代码行中删除"\r\n“
发布于 2012-07-21 19:52:23
好吧,也许这能帮到你。它只有在列表被排序的情况下才起作用,因为它似乎是按照提供的示例排序的。
int Count = 0;
List<String> Result = new List<String>();
String LastString= "";
for(int loop=0;loop<strDetailIDList.Count; loop++)
{
if(LastString!=strDetailIDList[loop].Substring(5))
{
if(LastString!="")
{
Result.Add(LastString+"-"+Count);
}
LastString=strDetailIDList[loop].Substring(5);
Count = 1;
}
else Count++;
}现在,"Result“列表中有了您需要在标签上显示的文本。
https://stackoverflow.com/questions/11590617
复制相似问题