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 をカウントします。Plzはいくつかのアイデアを提案します.

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

1 行だけで表示したい場合は、コードの上行から「\r\n」を削除します。

于 2012-07-21T08:42:53.250 に答える