예제가 포함된 C# 해시테이블
⚡ 스마트 요약
C#의 해시 테이블은 System.Collections 네임스페이스에 속하는 컬렉션으로, 데이터를 키-값 쌍으로 저장합니다. 각 고유한 키는 값에 매핑되며, 해당 키를 통해 저장된 값을 빠르게 조회할 수 있습니다.

C#의 해시테이블이란 무엇입니까?
해시 테이블은 키-값 항목을 저장하는 데 사용되는 특수 컬렉션입니다. 따라서 해시 테이블은 스택, 배열 목록, 큐와 같이 하나의 값만 저장하는 대신 2개의 값을 저장합니다. 이 2개의 값은 해시 테이블의 요소를 형성합니다.
다음은 해시 테이블의 값이 어떻게 보이는지에 대한 몇 가지 예입니다.
{ "001" , ".Net" }
{ "002" , ".C#" }
{ "003" , "ASP.Net" }
위에는 3개의 키 값 쌍이 있습니다. 각 요소의 키는 각각 001, 002, 003입니다. 각 키-값 쌍의 값은 “. NET", "C#" 및 "ASP.Net"입니다.
Hashtable 컬렉션에서 사용 가능한 작업을 더 자세히 살펴보겠습니다.
해시테이블 선언
Hashtable의 선언은 아래와 같습니다. Hashtable은 Hashtable Datatype의 도움으로 생성됩니다. "new" 키워드는 Hashtable의 객체를 생성하는 데 사용됩니다. 그런 다음 개체는 변수 ht에 할당됩니다.
Hashtable ht = new Hashtable()
해시테이블에 요소 추가
Add 메소드는 요소를 추가하는 데 사용됩니다. 변발. 명령문의 일반적인 구문은 다음과 같습니다.
HashTable.add("key","value")
예 1 :
해시 테이블의 각 요소는 2개의 값으로 구성됩니다. 하나는 키이고 다른 하나는 값입니다.
이제 이것이 코드 수준에서 작동하는 것을 살펴보겠습니다. 아래에 언급된 모든 코드는 콘솔 애플리케이션에 작성됩니다.
코드는 Program.cs 파일에 기록됩니다. 아래 프로그램에서는 위에서 언급한 방법을 어떻게 사용할 수 있는지 알아보기 위해 코드를 작성해 보겠습니다.
지금은 예제에서 해시테이블을 생성하고 해시테이블에 요소를 추가하고 그에 따라 표시하는 방법을 살펴보겠습니다.
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DemoApplication { class Program { static void Main(string[] args) { Hashtable ht = new Hashtable(); ht.Add("001",".Net"); ht.Add("002","C#"); ht.Add("003","ASP.Net"); ICollection keys = ht.Keys; foreach (String k in keys) { Console.WriteLine(ht[k]); } Console.ReadKey(); } } }
Code 설명:-
- 먼저, “New”라는 키워드를 사용하여 Hashtable 데이터 유형을 사용하여 해시테이블 변수를 선언합니다. 정의하는 변수의 이름은 'ht'입니다.
- 그런 다음 Add 메서드를 사용하여 해시 테이블에 요소를 추가합니다. 해시테이블에 무언가를 추가할 때 키와 값 요소를 모두 추가해야 한다는 점을 기억하세요.
- 해시 테이블의 요소를 표시하는 직접적인 방법은 없습니다.
- 해시테이블을 표시하려면 먼저 해시테이블에서 키 목록(001, 002, 003)을 가져와야 합니다.
- 이는 ICollection 인터페이스를 통해 수행됩니다. 이는 해시테이블 컬렉션의 키를 저장하는 데 사용할 수 있는 특수 데이터 유형입니다. 그런 다음 해시테이블 컬렉션의 키를 'keys' 변수에 할당합니다.
- 다음으로 각 키 값에 대해 ht[k] 문을 사용하여 해시 테이블의 관련 값을 가져옵니다.
위 코드를 올바르게 입력하여 프로그램을 실행하면 다음과 같은 출력이 표시됩니다.
출력:
해시 테이블에 사용할 수 있는 몇 가지 메서드를 더 살펴보겠습니다.
포함키
이 메서드는 Hashtable에 키가 있는지 확인하는 데 사용됩니다. 다음은 이 명령문의 일반적인 구문입니다. 키가 존재하면 명령문은 true를 반환하고, 그렇지 않으면 false 값을 반환합니다.
Hashtable.Containskey(key)
포함값
이 메서드는 Hashtable에 값이 있는지 확인하는 데 사용됩니다. 다음은 이 명령문의 일반적인 구문입니다. 해당 문은 값이 존재하면 true를 반환하고, 그렇지 않으면 false 값을 반환합니다.
Hashtable.ContainsValue(value)
예 2 :
우리의 코드를 변경해 봅시다 콘솔 응용 "Containskey" 및 "ContainsValue" 메서드를 사용하는 방법을 보여줍니다.
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DemoApplication { class Program { static void Main(string[] args) { Hashtable ht = new Hashtable(); ht.Add("001",".Net"); ht.Add("002","C#"); ht.Add("003","ASP.Net"); Console.WriteLine(ht.ContainsKey("001")); Console.WriteLine(ht.ContainsValue("C#")); Console.ReadKey(); } } }
Code 설명:-
- 먼저, ContainsKey 메서드를 사용하여 키가 해시테이블에 있는지 확인합니다. 이 메서드는 키가 해시 테이블에 있으면 true를 반환합니다. 키가 해시테이블에 존재하므로 이 메서드는 true를 반환해야 합니다.
- 그런 다음 ContainsValue 메서드를 사용하여 값이 해시 테이블에 있는지 확인합니다. 값이 해시테이블에 존재하므로 이 메서드는 'true'를 반환합니다.
위 코드를 올바르게 입력하여 프로그램을 실행하면 다음과 같은 출력이 표시됩니다.
출력:
출력에서 검색 중인 키와 값이 모두 해시 테이블에 있음을 명확하게 확인할 수 있습니다.
C# 해시테이블을 반복 처리하는 방법
위 예제들은 Keys 컬렉션을 통해 값을 읽어오지만, Hashtable은 더 깔끔한 방식으로 탐색할 수 있습니다. DictionaryEntry에 대한 foreach 루프를 사용하면 모든 요소의 키와 값을 한 번에 함께 얻을 수 있으며, 이는 Hashtable을 읽는 가장 일반적인 방법입니다.
단계 1) 해시 테이블을 생성하고 세 개의 키-값 쌍을 추가하세요.
단계 2) DictionaryEntry 변수를 사용하여 HashTable을 순회한 다음 각 항목의 Key 및 Value 속성을 읽습니다.
using System; using System.Collections; namespace DemoApplication { class Program { static void Main(string[] args) { Hashtable ht = new Hashtable(); ht.Add("101", "Java"); ht.Add("102", "Python"); ht.Add("103", "Kotlin"); foreach (DictionaryEntry entry in ht) { Console.WriteLine(entry.Key + " - " + entry.Value); } Console.ReadKey(); } } }
Code 설명:-
- ht라는 이름의 해시테이블이 생성되고, Add 메서드를 사용하여 세 개의 키-값 쌍이 삽입됩니다.
- foreach 루프는 각 요소를 DictionaryEntry에 할당하며, 해당 DictionaryEntry의 Key 및 Value 속성은 쌍의 두 부분을 드러냅니다.
프로그램이 실행되면 각 키 옆에 해당 값을 출력합니다. 예를 들어 101과 같이 출력됩니다. Java해시 테이블은 삽입 순서를 유지하지 않기 때문에 키와 값 쌍이 추가된 순서와 다르게 나타날 수 있습니다. 키만 읽으려면 Keys 컬렉션을 순회하고, 값만 읽으려면 Values 컬렉션을 순회하세요.
C# 해시테이블 메서드 및 속성
Hashtable 클래스는 쌍을 추가하고 제거하는 것부터 멤버십을 확인하고 요소를 계산하는 것까지 거의 모든 작업을 처리할 수 있는 몇 가지 메서드와 속성을 제공합니다. 가장 유용한 멤버는 아래에 나열되어 있습니다.
| 회원 | 타입 | 기술설명 |
|---|---|---|
| 키와 값을 더합니다. | 방법 | 새로운 키-값 쌍을 삽입합니다. 키는 고유해야 합니다. |
| 제거(키) | 방법 | 지정된 키와 일치하는 요소를 삭제합니다. |
| 분명한() | 방법 | 해시 테이블에서 모든 키-값 쌍을 제거합니다. |
| 키(key)를 포함합니다 | 방법 | 주어진 키가 존재하면 true를 반환합니다. |
| 값(값)을 포함합니다 | 방법 | 주어진 값이 존재하면 true를 반환합니다. |
| 카운트 | 부동산 | 저장된 키-값 쌍의 개수를 가져옵니다. |
| 키 | 부동산 | 모든 키의 컬렉션을 반환합니다. |
| 마케팅은: | 부동산 | 모든 값의 컬렉션을 반환합니다. |
각 키가 해시되기 때문에 ContainsKey와 인덱서는 거의 상수 시간 안에 요소를 찾을 수 있으며, 이것이 해시 테이블이 빠른 조회에 매우 유용한 이유입니다.
C#에서 해시테이블과 딕셔너리의 차이점
해시 테이블과 딕셔너리는 모두 키-값 쌍을 저장하며, 둘 다 C#의 광범위한 범주에 속합니다. 컬렉션중요한 차이점은 타입 안정성이며, 이 차이점이 새로운 코드에서 어떤 방식을 선택해야 할지를 결정합니다.
- 유형 안전: 해시테이블은 모든 키와 값을 객체로 저장하는 반면, 딕셔너리는 제네릭 타입이므로 컴파일러가 사용하는 타입을 확인합니다.
- 네임 스페이스 : Hashtable은 System.Collections에 있고, Dictionary는 System.Collections.Generic에 있습니다.
- Box노래 : 해시테이블은 int와 같은 값 형식을 박스 형태로 저장하지만, 제네릭 딕셔너리는 이러한 값 형식을 직접 저장하여 저장 비용을 절감합니다.
- 성능 : 딕셔너리는 값을 읽을 때 객체에서 다시 형변환할 필요가 없기 때문에 일반적으로 더 빠릅니다.
- 나사산 안전: Hashtable은 다음을 제공합니다. Sync하나의 작성자와 여러 읽기자를 위한 hronized 래퍼인 반면, 동시 실행 코드는 일반적으로 ConcurrentDictionary를 선택합니다.
새로운 프로젝트의 경우 일반적인 Dictionary를 사용하는 것이 권장되며, 일반적이지 않은 Hashtable은 주로 기존 코드에서 사용됩니다.




