2017-08-15 85 views
0

我有几个列的列表中的列表创建ID的块。当我的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(序列)来识别的信息块是包含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循环没有循环和正确设置字段。

+0

你可以遍历列表并保持串的电流seqnumber(如“AA”),并在每次遇到新的块时,你增加了当前seqnumber对应字符串。 – user2971569

回答

1

如果我理解正确的,你需要更新计数器,如果有令牌序列之间的差距。在这种情况下,使用字典记得以前遇到令牌:

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