C #에 HashSet에 해당하는 AddRange가 있습니까?


305

목록으로 할 수있는 작업 :

list.AddRange(otherCollection);

HashSet 에는 범위 추가 방법이 없습니다 . HashSet에 다른 컬렉션을 추가하는 가장 좋은 방법은 무엇입니까?

답변:


545

를 들어 HashSet<T>, 이름입니다 UnionWith.

이것은 HashSet작품 의 뚜렷한 방식을 나타냅니다 . Add에서와 같이 임의의 요소를 안전하게 설정할 수 없으며 Collections일부 요소는 자연스럽게 증발 할 수 있습니다.

나는 그것이 UnionWith"다른 것과 합병"한 후에 그 이름 을 취 한다고 생각 HashSet하지만, 과부하 IEnumerable<T>도 있습니다.


9
Imho HashSet(및 ISet)는 수학적으로 설정된 용어로 만들어졌습니다. UnionWith더 가까운 용어였다. 를 제외하고 수학적으로 말하면 Except으로 명확하게 명명되어야합니다 Subtract.
fa wildchild

5

이것은 한 가지 방법입니다.

public static class Extensions
{
    public static bool AddRange<T>(this HashSet<T> source, IEnumerable<T> items)
    {
        bool allAdded = true;
        foreach (T item in items)
        {
            allAdded &= source.Add(item);
        }
        return allAdded;
    }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.