본문 바로가기
C# Windows Form 개발 따라하기

[006] Dictionary 사용법. 기본,응용

by bryan.oh 2019. 1. 19.
반응형

C# 

Dictionary 사용법

Dictionary 기본 사용법

// 선언
Dictionary<string, string> dic = new Dictionary<string, string>();

// 값 추가
dic.Add("빨강", "red");
dic.Add("파랑", "blue");

// element 수
Console.WriteLine("Dictionary 수 : {0}", dic.Count);

// key 체크
if (dic.ContainsKey("빨강"))
    Console.WriteLine("빨강이 있음");

foreach (var key in dic.Keys) {
    Console.WriteLine("{0} 은 영어로 {1} 입니다.", key, dic[key]);
}

// 이미 있는 값 변경.
dic["파랑"] = "BLUE";

// red 가 한글로 뭔지 찾기 ( Value 로 Key 찾기 )
string red_to_kor = dic.Where(w => w.Value == "red").Select(s => s.Key).FirstOrDefault();
Console.WriteLine("red 는 한글로 {0} 입니다.", red_to_kor);

// 값을 가져오는 안전한 방법 TryGetValue
string value = "";
if (dic.TryGetValue("빨강", out value))
    Console.WriteLine("빨강의 값 : {0}.", value);
else
    Console.WriteLine("빨강을 찾을 수 없습니다.");

// 모두 삭제
dic.Clear();

Console.WriteLine("Clear 후 : {0}", dic.Count);

// 중요 ! Exception 이 발생하는 코드들.
Console.WriteLine("보라색은 {0}", dic["보라"]);   // 없는 key 바로 사용할 때 ( KeyNotFoundException )
dic.Add("빨강", "RED");                           // 이미 존재하는 key add 할 때

 

이렇게 단순한 key, value 로 사용할 수 도있고, 아래와 같이 key 하나에 여러가지의 데이터를 담으려면 아래와 같이 사용할 수 있습니다.

 

Dictionary Value 로  Class 사용하기

 

class 선언

   public class Person
    {
        public int personNumber;
        public string name;
        public int age;

        public Person(int personNumber, string name, int age)
        {
            this.personNumber = personNumber;
            this.name = name;
            this.age = age;
        }
    }
Dictionary<int, Person> dicPerson = new Dictionary<int, Person>();
dicPerson.Add(1001, new Person(1001, "홍길동", 36));
dicPerson.Add(1002, new Person(1002, "임꺽정", 26));
dicPerson.Add(1003, new Person(1003, "프랑캔", 36));

// personNumber 1001 의 name 
Console.WriteLine("personNumber 1001 의 name : {0}", dicPerson[1001].name);

// 임꺽정의 나이
int age = dicPerson.Where(w => w.Value.name == "임꺽정").Select(s => s.Value.age).FirstOrDefault();
Console.WriteLine("임꺽정의 나이 : {0}", age);

// 36세 모두 찾기.
foreach(Person p in dicPerson.Where(w=>w.Value.age == 36).Select(s=>s.Value))
{
    Console.WriteLine("{0}세. 이름 : {1} ", p.age, p.name);
}​

 

결과

personNumber 1001 의 name : 홍길동
임꺽정의 나이 : 26
36세. 이름 : 홍길동 
36세. 이름 : 프랑캔

 

 

 

 

2019/01/19 - [C# 기술] - DataTable VS Dictionary 검색 속도 차이

 

728x90
반응형

댓글