iT邦幫忙

2023 iThome 鐵人賽

DAY 5
0
自我挑戰組

C# 和 SQL 探索之路 - 2系列 第 5

Day 5: C# 資料結構: Hashset

  • 分享至 

  • xImage
  •  

大家好,今天要介紹的是面試常見的問題:HashSet ~

HashSet 是一種集合。集合內的每個物件都包含 Hash (雜湊) 值,即根據數值計算出來,獨一無二的亂數,由於 HashSet 內不存放同樣雜湊值得資料,因此集合內只會有一個相同的物件(數值)。

與字典 (Dictionary) 不同的是,字典為 Key-Value Pair,但 HashSet 不存放 Key。

和字典相同的地方是:皆使用 Hash 儲存,而且都是無序 (unordered) 存放資料。

當資料量大且不需要儲存重複資料時,計算雜湊值並放入集合,會比使用迴圈尋找、放在一般的資料結構中來得更快。

以下是程式範例,可以留意存放數值 / 物件時的不同行為。

HashSetTest hashSetTest = new HashSetTest();
hashSetTest.Run();

public class HashSetTest{
	protected class MyName{
    	string First;
    	string Second;

    	public MyName(string f, string s){
        	First = f;
        	Second = s;
    	}

    	public string Output(){
        	return First + ", " + Second;
    	}
	}

	HashSet<int> intHashSet;
	HashSet<MyName> myNameHashSet;

	public HashSetTest(){
    	intHashSet = new HashSet<int>();
    	myNameHashSet = new HashSet<MyName>();
	}

	public void Run(){
    	intHashSet.Add(1);
    	intHashSet.Add(2);
    	intHashSet.Add(3);
    	intHashSet.Add(2); // 重複的值不會再被加進去

    	foreach(int v in intHashSet){
        	Console.WriteLine(v.ToString());
    	}

    	MyName LeeYan = new MyName("Lee", "Yan");
    	myNameHashSet.Add(new MyName("Wang", "Ming"));
    	myNameHashSet.Add(LeeYan);
    	myNameHashSet.Add(new MyName("Lin", "Qin"));
    	myNameHashSet.Add(new MyName("Wang", "Ming")); // 不同物件 (雖然有相同的值),會被加進去
    	myNameHashSet.Add(LeeYan); // 相同物件不會被加進去

    	foreach(MyName v in myNameHashSet){
        	Console.WriteLine(v.Output());
    	}
	}
}

輸出結果為:

1
2
3
Wang, Ming
Lee, Yan
Lin, Qin
Wang, Ming

參考資料:

C# hashset 如何使用 - iT 邦幫忙
c# - Define: What is a HashSet? - Stack Overflow


上一篇
Day 4: C# 資料結構: Tuple
下一篇
Day 6: C# Delegate 介紹
系列文
C# 和 SQL 探索之路 - 230
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言