4

我想从字符串数组列表中选择第一个 5 个字符,

List<string> strDetailIDList = new List<string>();
foreach(DataRow row in ds.Tables[0].Rows)
{
   strDetailIDList.Add(row.ToString());
}              
str=strDetailIDList.ToArray();

现在 str 包含类似的列表

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。请提出一些想法。

4

3 回答 3

7

听起来你想要这样的东西:

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-21T08:20:37.727 回答
0

好吧,也许这可以帮助你。它仅在对列表进行排序时才有效,因为它似乎是由提供的示例。

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++;
}

现在“结果”列表中包含您需要在标签上显示的文本。

于 2012-07-21T11:52:23.147 回答
0

如果要在标签中显示,只需将 ConsoleWriteLine 更改为:

foreach (var value in counts)
{
    label1.Text +=  string.Format(("{0} - {1}\r\n", value.Prefix, value.Count));
}

如果您只想在一行中显示,请从上面的代码行中删除“\r\n”

于 2012-07-21T08:42:53.250 回答