試煉30 - HashSet 有用過嗎

2022 鐵人賽文 搬回點部落

開始試煉

如果要維護一個不重複的資料集合時 你會怎麼做
用List 每次檢查是否重複 還是開dictionary 呢
這時候就是 HashSet 出場的時候了
HashSet 跟 list 最大的差異 就是 HashSet 的內容是不重複的
來看一下範例code

void Main()
{
    var list1 = new HashSet<int>();
    list1.Add(1);
    list1.Add(2);
    list1.Add(2);
    list1.Add(3);
    list1.Remove(1);
    list1.Dump();

    var list2 = new HashSet<string>();
    list2.Add("x");
    list2.Add("x");
    list2.Add("y");
    list2.Add(default);
    list2.Dump();
}


加資料用Add,移除用Remove
可以放null
只會保留不重複資料

來看一下自訂class

void Main()
{
    var list3 = new HashSet<Employee>();
    list3.Add(new Employee { Id = 1, Name = "a" });
    list3.Add(new Employee { Id = 1, Name = "a" });
    list3.Dump();
}
class Employee
{
    public int Id { get; set; }
    public string Name { get; set; }
}


資料怎麼重複了 應該有讀者想到前幾個試煉有提到
自訂class怎樣算相等了吧
就留給你們實做了

結束試煉

整個System.Collections還有提供許多物件
Queue (先進先出 排隊模式 第一個 先上車)
Stack (後進先出 彈匣模式 最後裝的子彈 先擊發)
都可以想看看 有沒有適合使用的時候

如果內容有誤請多鞭策謝謝