ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Hashtable과 Dictionary<TKey, TValue>
    C# 예제 공부일기 2020. 7. 21. 20:21

    Hashtable이나 Dictionary<TKey, TValue> 객체는 사전과 같이 "키" 와 "값" 쌍으로 데이터를 저장한다. 0,1,2 같은 인덱스가 아니고 키에 의해 값을 찾아준다. Hashtable이나 Dictionary에서는 모든 값이 키가 될 수 있다. 하지만 Hashtable은 non-generic 컬렉션이고 Dictionary는 제네릭 컬렉션이다. 사용법은 거의 동일하다.

     

    Hashtable과 Dictionary는 키를 인덱스로 값을 찾아주기 때문에 탐색속도가 O(1) 이다. 이 작업을 해싱이라고 한다. Hashtable이라는 이름은 Hashing에서 유래했다.

     

    사용시 주의할 점

    - 키는 중복될 수 없다. 중복된 키로 저장하면 ArgumentException이 발생한다.

    - 없는키로 Hashtable에 접근하면 KeyNotFoundException이 발생한다.

    - 배열에서와 같은 순차적인 숫자 인덱스를 사용할 수 없다.

     

    Book RentalShop에서 콤보박스를 업데이트 할 때 딕셔너리를 썼었다.

     

    static void Main(string[] args)
            {
                Dictionary<string, string> colortable = new Dictionary<string, string>();
    
                colortable.Add("Red", "빨간색"); //테이블 추가
                colortable.Add("Green", "초록색");
                colortable.Add("Blue", "파란색");
    
                foreach (var item in colortable)
                {
                    Console.WriteLine("colortable[{0}] = {1}", item.Key, item.Value);
                }
    
                try
                {
                    colortable.Add("Red", "빨강");
                }
                catch (ArgumentException e)
                {
                    Console.WriteLine(e);
                }
                try
                {
                    Console.WriteLine(" Yellow => {0} ", colortable["Yellow"]);
                }
                catch(KeyNotFoundException e)
                {
                    Console.WriteLine(e);
                }
    
                Console.WriteLine("\n" + colortable["Red"]);
                Console.WriteLine(colortable["Blue"]);
                Console.WriteLine(colortable["Green"]);
            }

    영어색깔은 Key 그리고 한글색깔은 Value이다. 첫번째 try문에서는 이미 있는 키 값으로 딕셔너리에 추가를 하려했고, 두번째는 없닌 키값으로 조회를 했기 때문에 에러가 난다,

     

    마지막 세개의 출력에서 키값으로 벨류를 검색한다.

     

    키값으로 벨류를 조회할때는 DictionaryName[Tkey] 로 찾는다.

    'C# 예제 공부일기' 카테고리의 다른 글

    인덱서  (0) 2020.07.22
    SortedList와 Sorted<TKey, TValue>  (0) 2020.07.21
    Stack<T> 와 Polish 계산기  (0) 2020.07.21
    Queue<T> 컬렉션의 사용 방법  (0) 2020.07.21
    IComparable 인터페이스를 이용한 객체의 정렬  (0) 2020.07.21
Designed by Tistory.