2013-02-09 1 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 Length가 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

+0

Ok. 더 많은 정보를 가지고 제 질문을 편집하겠습니다. –

+0

Merge()가 무엇을했는지 알면 도움이 될 것입니다. 당신이 성취하려는 것을 설명하는 것은 어떻습니까? – Sinaesthetic

답변

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); 
관련 문제