2013-02-09 93 views
-4

我有這樣的代碼:我如何檢查列表長度是否比上次更長?

int LRLength = LR.Count; 
      for (int i = 0; i < LR.Count; i++) 
      { 
       LRLength = LR.Count; 
       LR = merge(LR); 
       if (LR.Count < LRLength) 
       { 
        LR = merge(LR); 
        if (LR.Count == LRLength) 
        { 
         break; 
        } 
       } 
      } 

這是功能合併:

private List<Lightnings_Extractor.Lightnings_Region> merge(List<Lightnings_Extractor.Lightnings_Region> Merged) 
     { 
      List<Lightnings_Extractor.Lightnings_Region> NewMerged = new List<Lightnings_Extractor.Lightnings_Region>(); 
      Lightnings_Extractor.Lightnings_Region reg; 
      int dealtWith = -1; 
      for (int i = 0; i < Merged.Count; i++) 
      { 
       if (i != dealtWith) 
       { 

        reg = new Lightnings_Extractor.Lightnings_Region(); 

        if (i < Merged.Count - 1) 
        { 

         if (Merged[i].end + 1 >= Merged[i + 1].start) 
         { 
          reg.start = Merged[i].start; 
          reg.end = Merged[i + 1].end; 
          NewMerged.Add(reg); 
          dealtWith = i + 1; 
         } 
         else 
         { 
          reg.start = Merged[i].start; 
          reg.end = Merged[i].end; 
          NewMerged.Add(reg); 
         } 
        } 
        else 
        { 

         reg.start = Merged[i].start; 
         reg.end = Merged[i].end; 
         NewMerged.Add(reg); 

        } 
       } 
      } 
      return NewMerged; 
     } 

在這個類:Lightnings_Extractor.Lightnings_Region我只有兩個int變量。 這個函數的想法是得到一個List和合並的區域。

例如,一旦我調用函數和列表LR長度是8,現在我會減少它。例如,如果它需要將兩個索引合併爲一個,那麼List將返回長度爲7.如果需要合併另一個索引,則長度將爲6,依此類推。

我想檢查上面的第一個代碼是當我應該停止調用函數來合併索引。

如果長度爲8,下一次仍然是8,則不要停止循環。 如果長度爲8,下一次爲7,則再次調用該函數。 如果長度是7停止循環。但是如果長度是6,請再次調用它。

直到最後的長度將與之前的長度相同!

所以,我想這個代碼,但它不是良好的工作:

int LRLength = LR.Count; 
       for (int i = 0; i < LR.Count; i++) 
       { 
        LRLength = LR.Count; 
        LR = merge(LR); 
        if (LR.Count < LRLength) 
        { 
         LR = merge(LR); 
         if (LR.Count == LRLength) 
         { 
          break; 
         } 
        } 
       } 
+1

即時通訊抱歉,但多數民衆贊成在混亂,請嘗試和打破問題 – craig1231 2013-02-09 20:34:48

+0

好吧,我會編輯我的問題與更多的信息。 – 2013-02-09 20:41:16

+0

如果我們知道Merge()做了什麼,它可能會有所幫助。如何解釋你想要完成的事情。 – Sinaesthetic 2013-02-09 20:41:20

回答

2

試圖作出一些假設,以你想要完成的任務。以下基本上會捕獲列表的原始長度以供比較。它將至少運行一次,並保持運行,直到LRLength == LR.Count

int LRLength = LR.Count; 
do{ 
    LR = merge(LR); 
} while(LR.Count != LRLength); 

如果你試圖運行循環,直到你連續兩次獲得相同的計數:

int prevCount; 
do{ 
    prevCount = LR.Count; 
    LR = merge(LR); 
} while(prevCount != LR.Count);