2017-08-15 110 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++; 
    } 
}