[C#] C # 세트 컬렉션?

SetC #에 Java의 콜렉션 과 동등한 것이 있는지 아는 사람이 있습니까? 나는 당신 이 값을 채우고 무시하면서 a Dictionary또는 a HashTable를 사용하여 세트를 모방 할 수는 있지만 매우 우아한 방법은 아닙니다.



답변

HashSet 사용해보기 :

HashSet (Of T) 클래스는 고성능 세트 작업을 제공합니다. 집합은 중복 요소가없고 특정 순서가 아닌 컬렉션입니다.

HashSet (Of T) 객체의 용량은 객체가 보유 할 수있는 요소의 수입니다. 요소가 객체에 추가되면 HashSet (Of T) 객체의 용량이 자동으로 증가합니다.

HashSet (Of T) 클래스는 수학 집합의 모델을 기반으로하며 Dictionary (Of TKey, TValue) 또는 Hashtable 컬렉션 의 키에 액세스하는 것과 유사한 고성능 집합 작업을 제공합니다 . 간단히 말해서 HashSet (Of T) 클래스는 값이없는 Dictionary (Of TKey, TValue) 컬렉션 으로 생각할 수 있습니다 .

HashSet (Of T) 컬렉션은 정렬되지 않으며 중복 요소를 포함 할 수 없습니다 …


답변

.NET 3.5를 사용하는 경우을 사용할 수 있습니다 HashSet<T>. .NET이 Java뿐만 아니라 세트를 제공하지 않는다는 것은 사실입니다.

인 Wintellect의 PowerCollections는 너무 도움이 될 수 있습니다.


답변

.NET 4.0 이상을 사용하는 경우 :

정렬이 필요한 경우을 사용하십시오 SortedSet<T>. 그렇지 않으면 검색 하지 않고 조작 하기 HashSet<T>때문에 사용하지 마십시오 O(1). 반면 에 검색 및 조작 SortedSet<T>O(log n)조작 할 수 있습니다.


답변

나는 Iesi.Collections를 사용합니다 http://www.codeproject.com/KB/recipes/sets.aspx

그것은 많은 OSS 프로젝트에서 사용되었으며, 처음에는 NHibernate에서 발견되었습니다.


답변

Dictionary<T, object>값 주위에 null을 저장 하는 래퍼를 사용 합니다. 이것은 O (1) 키에 대한 추가, 조회 및 제거를 제공하며 모든 의도와 목적에 세트처럼 작동합니다.


답변

CodePlex 에서 PowerCollections 를 살펴보십시오 . Set 및 OrderedSet 외에도 Deque, MultiDictionary, Bag, OrderedBag, OrderedDictionary 및 OrderedMultiDictionary와 같은 유용한 컬렉션 유형이 몇 가지 있습니다.

더 많은 콜렉션을 위해 C5 Generic Collection Library도 있습니다.


답변

나는 이것이 오래된 스레드라는 것을 알고 있지만 동일한 문제가 발생했으며 동일한 시드가 주어지면 GetHashCode ()가 다른 코드를 반환했기 때문에 HashSet이 매우 신뢰할 수 없다는 것을 알았습니다. 그래서 List를 사용하고 이와 같은 add 메소드를 숨기지 않는 이유는 무엇입니까?

public class UniqueList<T> : List<T>
{
    public new void Add(T obj)
    {
        if(!Contains(obj))
        {
            base.Add(obj);
        }
    }
}

List는 동등성을 결정하기 위해서만 Equals 메소드를 사용하기 때문에 원하는 결과를 얻을 수 있도록 T 유형에서 Equals 메소드를 정의 할 수 있습니다.