http://hongjinhyeon.tistory.com/87
C#에서는 KEY 와 VALUE를 사용해서 자료를 저장하는 타입이 2가지가 있습니다.
해시테이블과 딕셔너리인데 사용법은 거의 동일하지만 내부적으로 처리하는 기술이 다릅니다.
이 두가지 타입의 기본적인 사용법과 장단점에 대해서 알아보겠습니다.
1.해시테이블 ( Hashtable)
01.
//생성
02.
Hashtable hashtable =
new
Hashtable();
03.
04.
//자료 추가 ( 박싱이 일어남)
05.
hashtable.Add(
"Data1"
,
new
HongsClass() { Name =
"홍진현1"
, intCount = 1 });
06.
hashtable.Add(
"Data2"
,
new
HongsClass() { Name =
"홍진현2"
, intCount = 2 });
07.
08.
//자료 검색
09.
if
(hashtable.ContainsKey(
"Data1"
).Equals(
true
))
10.
{
11.
HongsClass temp = hashtable[
"Data1"
]
as
HongsClass; (언박싱 처리)
12.
Console.WriteLine(temp.Name);
13.
}
14.
15.
//Loop 전체 순회출력
16.
foreach
(
string
NowKey
in
hashtable.Keys)
17.
{
18.
HongsClass temp = hashtable[NowKey]
as
HongsClass;
19.
Console.WriteLine(temp.Name);
20.
21.
}
22.
23.
//결과 OUTPUT
24.
//홍진현1
25.
//홍진현1
26.
//홍진현2
27.
28.
<p></p>
[해시테이블의 특징]
1.Non-Generic
2.Key 와 Value 모두 Object를 입력받는다.
3.박싱/언박싱(Boxing/Un-Boxing) (참고: http://hongjinhyeon.tistory.com/90) 을 사용한다.
즉, 제네릭을 이용하지 않고 Object를 사용하기 때문에 모든 데이터 타입을 다 받고 처리 할 수 있는 장점이 있지만
자료의 입력에 내부적으로 박싱이 일어나고 사용하는 곳에서도 다시 언박싱을 해줘야 사용이 가능합니다.
2.딕셔너리 ( Dictionary )
01.
//생성- 제네릭 기반
02.
Dictionary<
string
, HongsClass> dictionary =
new
Dictionary<
string
, HongsClass>();
03.
04.
//자료추가
05.
dictionary.Add(
"Data1"
,
new
HongsClass() { Name =
"홍진현1"
, intCount = 1 });
06.
dictionary.Add(
"Data2"
,
new
HongsClass() { Name =
"홍진현2"
, intCount = 2 });
07.
08.
//자료검색
09.
if
(dictionary.ContainsKey(
"Data1"
).Equals(
true
))
10.
{
11.
Console.WriteLine(dictionary[
"Data1"
].Name);
12.
}
13.
14.
//Loop 전체 순회출력
15.
foreach
(HongsClass NowData
in
dictionary.Values)
16.
{
17.
Console.WriteLine(NowData.Name);
18.
}
19.
20.
//결과
21.
//홍진현1
22.
//홍진현1
23.
//홍진현2
[딕셔너리의 특징]
3.박싱/언박싱이 일어나지 않는다.
+딕셔너리는 선언시에 사용할 타입을 미리 설정하기 때문에 입력시나 출력시에도 박싱/언박싱이 일어나지 않습니다.
따라서 입력과 사용에 용이하며, 외부에서도 이 타입을 사용할 때도 타입이 정의되어 있으니 다른 타입으로 형변환을
시도하다가 실패할 염려가 없습니다.
3.결론
+두가지 타입이 사용법은 비슷하지만 내부적인 처리와 수용하는 타입의 형태가 다르므로 필요에 따라서 선택을 해야합니다.
고정적으로 하나의 타입만 입력받을 시에는 딕셔너리를 사용하며, Value에 일정한 형식이 없고 여러 형태를 저장하려면
해시테이블을 사용해야합니다.
'프로그래밍(Programming) > C#' 카테고리의 다른 글
C# Linq 1강 - Linq 맛보기 (0) | 2015.09.10 |
---|---|
c# XML 문서 주석(C# 프로그래밍 가이드) /// <summary> (0) | 2015.09.02 |
C# queue (0) | 2015.09.02 |
c# Stack (0) | 2015.09.02 |
C# - Yield (0) | 2015.09.02 |