基于字段在List上创建ID块

时间:2017-08-15 16:58:48

标签: c# list

我有一个包含多个列的列表。当我的Column1 =“AA”时,我需要为块创建一个ID。如果前一个块包含ID,我应该有ID + 1。

我有这样的事情:

Column0|Column1|
23|AA
23|AA
23|AX
23|AX
23|AX
23|AA
23|AA
23|AX
23|AA

我需要这样的事情:

Column0|Column1|Column2
23|AA|1
23|AA|1
23|AX|
23|AX|
23|AX|
23|AA|2
23|AA|2
23|AX|
23|AA|3

换句话说,我想创建ID(在seq。中)以识别包含Column1 = AA的信息块。

旁注:列表中的订单已经是我需要的订单。

那么,我应该使用foreach还是循环?当我尝试应用我的想法时,我感到困惑:

(_ gDataID是我的列表;列类型将包含我的AA或AX或......; SeqNumberOfTempCycle是我想用“ID块”设置的列)

     int lastseq = 0;


            for (int i = 0; i < _gDataID.Count; i++)
            {

                if (_gDataID[i].Type.ToString() == "AA")
                {
                    //Does the previous columns has a seq?
                    if (_gDataID[i-1].SeqNumberOfTempCycle.ToString() == null)
                    {                         
                        _gDataID[i].SeqNumberOfTempCycle = lastseq + 1;
                        lastseq = lastseq + 1;

                    }
                    else 
                    {
                        _gDataID[i].SeqNumberOfTempCycle = lastseq;

                    }
                }

            }

您可能会注意到,我的想法效果不佳。首先,我不能这样做:

_gDataID[i].SeqNumberOfTempCycle = lastseq + 1;

我的for循环没有循环并正确设置字段。

1 个答案:

答案 0 :(得分:1)

如果我理解正确,如果令牌序列之间存在间隙,则需要更新计数器。在这种情况下,使用Dictionary来记住以前遇到的令牌:

Dictionary<string, int> tokens = new  Dictionary<string, int>();
int i = 0;
while(i < gDataID.Count)
{
   string dataToken = gDataID[i].Type.ToString();
   if(!tokens.ContainsKey(dataToken)
   {
     tokens.Add(dataToken, 0);
   }
   tokens[dataToken]++;

   While(i < gDataID.Count && gDataID[i].Type.ToString() == dataToken)
   {
       gDataID[i].SeqNumberOfTempCycle =  tokens[dataToken];
       i++;
   }
}