2013-02-17 2 views
0

문자열 값을 저장하는 사전과 부호없는 64 비트 정수를 저장하는 목록이 있습니다. 이 클래스는 사전에 같은 키와 값이 포함되어 있으면 같은 유형의 다른 클래스와 동일한 것으로 간주됩니다.목록에서 중복 된 항목 찾기 및 병합

또한이 클래스의 여러 인스턴스를 포함하는 정적 목록이 있습니다. 이 목록에 중복 된 항목이 있는지 확인하고 싶습니다. 중복이 있으면 목록을 병합하고 싶습니다.

가 여기에 내가 생각 의사 코드이다 : 나는 (내 대상 프레임 워크는 .NET 2.0 최신 프레임 워크에 의해 추가 된 기능에 의존하지 않고이 작업을 수행 할 수있는 방법

foreach (var item in StaticList) 
{ 
    if (item.Equals(anotherItem)) // i.e., dictionaries are equal 
    { 
     item.UInt64List.AddRange(anotherItem.UInt64List); 
     StaticList.Remove(anotherItem); 
    } 
} 

, 그래서 공상 연합 (EU), 교차가 없습니다, 기타.)?

참고 : 이미 두 개의 사전이 같은지 확인하는 방법을 이미 알아 냈습니다. 중복을 찾아서 병합하고 싶습니다.

답변

0

모든 항목을 서로 비교해야합니다.

for (int i = 0; i < StaticList.Length-1; i++) 
{ 
    var item = StaticList[i]; 
    for (int j = i+1; j < StaticList.Length;) 
    { 
     var anotherItem = StaticList[j]; 
     if (item.Equals(anotherItem)) // i.e., dictionaries are equal 
     { 
      item.UInt64List.AddRange(anotherItem.UInt64List); 
      StaticList.RemoveAt(j); // it has better performance compared to `StaticList.Remove(anotherItem);` 
     } 
     else 
      j++; 
    } 
} 

난 당신이 반복하는 동안 목록을 수정할 수 없습니다 당신이 다른 목록의 항목을 넣어 항목에 저장하는 성능 저하를 많이 부과하는, 나중에 제거해야하기 때문에하는 foreach 루프를 사용하지 않는 것이 좋습니다 나중에 검색하여 제거하십시오.