2012-03-29 6 views
0

목록에 중복 항목이 추가되지 않도록 할 수있는 속성이나 메커니즘이 있습니까? 아니면 매번 목록을 검색해야합니까?문자열 목록에 중복 여부를 확인할 수 있습니까?

IOW, 그냥 갈 훨씬 좋네요 될 것이다 :

List<String> AAppsToDisplay = new List<String>(); 
AAppsToDisplay.DuplicatesAllowed = false; 
... 
while (odr.Read()) 
{ 
    AAppsToDisplay.Add(odr.GetString(0)); 
} 

이 작업을 수행해야하는 것보다 :

List<String> AAppsToDisplay = new List<String>(); 
. . . 
String s = String.Empty; 
while (odr.Read()) 
{ 
    s = odr.GetString(0); 
    if (! AAppsToDisplay.Contains(s)) 
    { 
    AAppsToDisplay.Add(s); 
    } 
} 
+5

당신이 * 주문을 모두 필요하십니까 갈 수 *? –

+0

여기에 클레이가 있습니다 : http://stackoverflow.com/questions/918742/efficient-list-of-unique-strings-c-sharp 아무리 적더라도 에릭의 조언에 관심이 있습니다. –

+0

에릭의 의견을 분명히 해두십시오 : 주문하기 (기본적으로) 임의의 순서가 아니라 추가 된 순서로 저장된 항목을 나타냅니다. 목록을 정렬 할 필요가 없다면,'HashSet '을 사용하십시오. –

답변

15

사용하는 대신 작업, HashSet<string>에 더 적합한 도구입니다. 당신은 HashSet의에 Contains를 사용한다면

var hashset = new HashSet<string>(); 

// in loop 
hashset.Add(value); 

, 그것은 세트가 특히 큰 성장 경우 특히, List<string>에 그것을 사용하는 것보다 더 최적의 솔루션이 될 것입니다. 그러나 비즈니스 요구 사항 내에서 자동으로 중복을 제거하는 것이 허용되면 필요하지 않습니다. Add 메서드는 값이 추가되었는지 여부를 나타내는 부울을 반환합니다. 중복은 결코 그것을 세트로 만들지 않습니다.


HashSet<T>이 삽입 순서를 유지하기 위해 문서화되지 않도록주의하는 것이 중요하다. 의 경우 삽입 순서가 동일하고 특정 용도에 따라 영향을받을 수 있지만 결과에 의존해서는 안됩니다.

당신은 List 클래스에 확장 메서드를 사용할 수
1

:

public static class StringListExtensions { 
    public static bool AddIfNotPresent(this List<string> list, string newString) { 
     if (!list.Contains(newString)) { 
      this.Add(newString); 
      return true; 
     } 
     return false; 
    } 
} 
+0

HashSet을 좋아하지 않는 이유는 무엇입니까? –

+0

나는 HashSet이 더 뛰어나다는 것을 알고 있지만,이 클래스를 여러 곳에서 사용하거나 제 3 자 dll 등에서 사용한다면 확장 기능이 적합 할 수도있다. –

+1

고양이를 피부에 몇 가지 방법이 있는지는 놀랍지 만, m 옥수수 쇠고기 해시에 배고프다. –

1

당신은 * 및 중복 * 무료 인을 System.Linq 라이브러리를 사용하고

List<String> AAppsToDisplay = new List<String>(); 
... 
while (odr.Read()) 
{ 
    AAppsToDisplay.Add(odr.GetString(0)); 
} 

//new code 
AAppsToDisplay = AAppsToDisplay.Distinct().ToList(); 
+0

나는 그것을 들어 본 적이 없으며, 위의 사본을 복사하여 붙여 넣었다 - 그것을 제거했다. –

관련 문제