Có AddRange tương đương với Hashset trong C # không


306

Với một danh sách bạn có thể làm:

list.AddRange(otherCollection);

Không có phương thức thêm phạm vi trong Hashset . Cách tốt nhất để thêm một bộ sưu tập khác vào Hashset là gì?

Câu trả lời:


547

Đối với HashSet<T>, tên là UnionWith.

Điều này là để chỉ cách khác biệt của HashSetcông trình. Bạn không thể an toàn Addmột tập hợp các yếu tố ngẫu nhiên như trong Collections, một số yếu tố có thể bốc hơi một cách tự nhiên.

Tôi nghĩ rằng UnionWithnó có tên của nó sau khi "hợp nhất với người khác HashSet", tuy nhiên, cũng có một sự quá tải IEnumerable<T>.


9
Imho, HashSet(và ISet) đã được tạo ra với thuật ngữ được đặt theo toán học. UnionWithlà thuật ngữ gần hơn. Ngoại trừ Except, rõ ràng nên được đặt tên là Subtract, nói theo toán học.
fa wildchild 7/1/2015

5

Đây là một cách:

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;
    }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.