C#/자료구조 이해하기

C# 해시테이블(Hash table)에 대해 알아보자!

ForMan_ 2024. 3. 13. 14:27

해시테이블이란?

 

  • 해시테이블은 Dictionary와 같이 "키(Key) - 값(Value)" 구조를 가진 컬렉션입니다. 해시테이블에서 키와 값은 'object' 자료형을 사용하며, 모두 object형식으로 선언되어 모든 데이터 타입을 가질 수 있습니다.
  • using System.Collections; 를 통해 사용할 수 있습니다.

<이미지 출처: https://www.oreilly.com/api/v2/epubs/9781788833738/files/assets/e874bb03-d53d-432d-a1b6-cfb25bae7204.png>


해시 테이블을 사용해보자!

 

1. Add(key, value) - 키/값 추가

  • 키와 값을 해시 테이블에 추가합니다.
public void TestHashTable()
{
	Hashtable ht = new Hashtable();

	ht.Add("name", "짱구");
	ht.Add("age", 5);
	ht.Add("adress", "떡잎마을");
        
	foreach (object k in ht.Keys)
	{
		Debug.Log("Value : " + ht[k]);
	}
}

 

2. Remove(key) - 지정 키의 값을 제거

  • 괄호 안의 key와 연결된 value를 제거합니다.
 public void TestHashTable()
{
	Hashtable ht = new Hashtable();

	ht.Add("name", "짱구");
	ht.Add("age", 5);
	ht.Add("adress", "떡잎마을");

	ht.Remove("adress");
        
	foreach (object k in ht.Keys)
	{
		Debug.Log("Value : " + ht[k]);
	}
}

 

3. Keys / Values

  • Keys: 해당 해시 테이블의 모든 키를 가져옵니다.
  • Values: 해당 해시 테이블의 모든 값을 가져옵니다.
public void TestHashTable()
{
	Hashtable ht = new Hashtable();

	ht.Add("name", "짱구");
	ht.Add("age", 5);
	ht.Add("adress", "떡잎마을");

	// ICollection : 해시 테이블 컬렉션을 저장할 수 있는 특수 데이터 유형.
    // var도 사용가능. var : 개사기 자료형.
	ICollection key = ht.Keys;
	ICollection value = ht.Values;

	foreach (var k in key)
	{
		Debug.Log("Key : " + k);
	}

	foreach (var v in value)
	{
		Debug.Log("Value : " + v);
	}
}

 

4. ContainsKey() / ContainsValue()

  • ContainsKey(key): 해시테이블에 해당 키의 존재 유무를 확인합니다.
  • ContainsValue(value): 해시테이블에 해당 값의 존재 유무를 확인합니다.
public void TestHashTable()
{
	Hashtable ht = new Hashtable();

	ht.Add("name", "짱구");
	ht.Add("age", 5);
	ht.Add("adress", "떡잎마을");

	Debug.Log(ht.ContainsKey("name"));
	Debug.Log(ht.ContainsKey("sex"));
	Debug.Log(ht.ContainsValue("짱구"));
	Debug.Log(ht.ContainsValue("남자"));
}

 

5. Count - 키/값 쌍의 개수

  • Count는 해당 해시테이블의 키와 값 한 쌍을 1개로 정하여 총 개수를 반환합니다.
public void TestHashTable()
{
	Hashtable ht = new Hashtable();

	ht.Add("name", "짱구");
	ht.Add("age", 5);
	ht.Add("adress", "떡잎마을");

	int num = ht.Count;

	Debug.Log(num);
}

 

6. Clone - 복사본 생성

  • Clone은 해당 해시테이블의 복사본을 만듭니다.
public void TestHashTable()
{
	Hashtable ht = new Hashtable();

	ht.Add("name", "짱구");
	ht.Add("age", 5);
	ht.Add("adress", "떡잎마을");
	
    //ht에 저장된 object형태의 데이터를 복사해서 htClone에 전달하기 때문에 명시적 형변환을 해줘야함.
	Hashtable htClone = (Hashtable)ht.Clone();

	foreach (object item in htClone.Values)
	{
		Debug.Log(item);
	}
}