2012-07-21 102 views
4

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

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。 Plz建议一些想法。

回答

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

我想在标签中显示它 – chitra 2012-07-21 08:27:11

+2

@chitra:好的,我现在没有时间去改变答案 - 你应该在问题中包含这些信息......以及关于它的更多细节。一个标签?几个标签?鉴于迄今为止的信息,将其放入标签中的哪一点会给您带来问题?这听起来像是一个单独的问题。 – 2012-07-21 08:36:00

+0

先生,它给总记录数,我想显示每个项目在单独的标签,因为我上面提到 – chitra 2012-07-21 08:53:38

0

如果你想在标签中显示,然后简单地改变ConsoleWriteLine有:

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

如果你只是想在一个行中删除展示“\ r \ n”代码的上一行

+0

先生,它给总记录数,我想显示每个项目在单独的标签,因为我提到以上 – chitra 2012-07-21 10:06:06

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

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

+0

你假设字符串按顺序排列。他们碰巧在样本中,但我没有看到任何迹象表明情况一定如此。 (在Pascal案例中看到局部变量也是很奇怪的。) – 2012-07-21 21:58:34

+0

由于它们是从表中来的,所以你可以在检索时命令它们(按顺序排列)。无论如何,这个代码为问题提供了一个样本解决方案,因为它是这个意图。整个解决方案的实际处理将由程序员决定,因为他/她是唯一知道问题所有参数的人。 – ThunderGr 2012-07-23 17:04:34

+0

是的,你*可以*订购他们 - 但你甚至没有在你的答案中提到。您已经不必要地添加了额外的需求,并且仍然以更复杂的代码结束。 – 2012-07-23 19:23:04

相关问题