[서론]
자료구조 : 데이터를 구조적으로 구현하는 알고리즘
Collection : C#에서 지원하는 자료구조 클래스. List, ArrayList, Dictionary, HashTable, Stack, Queue 등이 있음.
이번 포스팅에서는 이 중 Dictionary, HashTable에 대해 알아보려하는데요, 둘 다 key와 value를 사용해서 자료를 저장하는 타입이라는 공통점이 있습니다. 둘의 사용법은 거의 동일하지만 내부적으로 처리하는 기술이 다릅니다.
[Dictionary]
: 선언 시 미리 타입을 설정하기 때문에 입출력 시 박싱, 언박싱이 일어나지 않습니다. 따라서 사용에 용이하며, 다른 타입으로 형변환하기에도 오류가 생길 우려가 없습니다.
<특징>
1.Generic
2.Key와 Value 모두 선언시 타입을 입력해줘야 함.
3.박싱/언박싱이 일어나지 않음.
1. Dictionary 선언
var dictionary = new Dictionary<string, int>();
또는
var dic = new Dictionary<string, int>() //바로 값 입력.
{
{"jj", 10},
{"hh", 12},
{"gg", 14}
}
2. Add (추가)
dictionary.Add("jj", 10);
dictionary.Add("hh", 12);
dictionary.Add("gg", 14);
int a = dictionary["jj"]; // a = 10
3. ContainsKey (Key 검색)
Debug.Log(dictionary.ContainsKey("jj")); // "jj" 문자열이 존재할 경우 true, 아닐 경우 false를 return.
* 존재하지 않는 키를 사용하면 오류가 생기므로 항상 사용 전에 3,4번을 사용해줍니다.
4. TryGetValue (Key를 통해 값을 반환)
int a = 0; // value와 같은 타입
if(dictionary.TryGetValue("hh", out a)) // "hh" 문자열이 존재할 경우 true, 아닐 경우 false를 return.
Debug.Log(a); // 12가 찍힘.
* 변수 선언을 미리하지 않아도 됩니다.
if(dictionary.TryGetValue("gg", out int aa))
Debug.Log(aa); // 14가 찍힘.
5. KeyValuePair (Dictionary 안에 있는 데이터 foreach로 확인)
foreach(KeyValuePair<string, int> p in dictionary)
{
Debug.Log(p.Key+","+ p.Value);
}
또는 var를 사용해도 됩니다.
foreach(var p in dictionary)
{
Debug.Log(p.Key+","+ p.Value);
}
5. Remove
dictionary.Remove("jj")
[HashTable]
: 제네릭을 이용하지 않고 Object를 사용하기 때문에 모든 데이터 타입을 사용할 수 있는 장점이 있지만, 자료의 입출력에 내부적으로 박싱, 언박싱을 해줘야 합니다.
<특징>
1.Non-Generic
2.Key 와 Value 모두 Object를 입력받음.
3.박싱/언박싱(Boxing/Un-Boxing)이 일어남.
1. HashTable 선언
Hashtable hash = new Hashtable();
2. Add
hash.Add("jj", 10);
hash.Add("hh", "apple");
hash.Add("gg", true);
hash["aa"] = "가짜"; // Add 키워드를 사용하지 않아도 이런 형태로도 추가가 가능합니다.
3. ContainsKey - Dictionary와 동일
* Hashtable에는 TryGetValue 키워드가 없습니다.
4. DictionaryEntry (Dictionary 안에 있는 데이터 foreach로 확인)
foreach (DictionaryEntry p in hash)
{
Debug.Log(p.Key + "," + p.Value);
}
5. Remove
hash.Remove("jj");
6. Hashtable 안의 모든 key값과 value값 가져오는 방법
ICollection keyColl = graph.Keys;
foreach (string a in keyColl) //keyrk string일 때
{
Debug.Log(a);
}
ICollection valueColl = graph.Values;
foreach (string a in valueColl) //value가 string일 때
{
Debug.Log(a);
}
'[Unity] > [C#]' 카테고리의 다른 글
[C#] 두 점, 두 벡터 사이의 각도 구하는 법 (-180 ~ 180) (0) | 2021.07.22 |
---|---|
[C# 기초] #13 : Collection(Stack, Queue) (0) | 2021.07.22 |
[C#] 컬렉션(Collection) (0) | 2021.07.19 |
[C#] .NET FrameWork(닷넷 프레임워크) (0) | 2021.07.18 |
[C# 기초] #11 : Collection(List, ArrayList) (0) | 2021.07.16 |