전체 코드
using System.Collections;
using System.Collections.Generic;
namespace Rookiss_CSharp
{
class Program()
{
class Monster
{
public Monster(int id) { this.id = id; }
public int id;
}
static void Main(string[] args)
{
// List<int> list = new List<int>();
// List의 단점
// ID 식별자
// 10 공격(네트워크) + 103(ID) 몬스터 : 103 ID 몬스터로 공격
// 몬스터 리스트 -> 100만
// 100만에서 103 ID 몬스터 찾으려면..
// 너무 느림 : 루프를 돌면서 103번인지 체크
// => 특정 키를 가지고 빠르게 찾을 수 있도록 하는 것이 필요
// Key -> Value
// Dicionary(사전)
// 특정 값을 찾는 속도는 Dictionary가 List보다 월등히 빠름
// Dictionary : 평균적으로 O(1)(상수 시간)의 시간 복잡도를 가지는 반면
// List : O(n)(선형 시간)의 시간 복잡도를 갖음
// 구조
// List : 선형 탐색
// Dicionary : 해시 테이블로 구현
// 해시 테이블(Hashtable)
// 10000개 공이 들어있는 아주 큰 박스가 있다면 숫자 100이 그려진 공을 찾는다면 일일히 다 꺼내봐야함
// 그러나 이것을 생각해본다면, 박스 여러개로 쪼개 놓으면(1000개), 공을 배분해서 10개씩 박스에 넣는다면
// [1-10], [11-20], [21-30]... 1천개
// 찾기가 수월함
// 77이 그려진 공을 찾는 다면 7번째 박스에서 찾으면 됨
// 해시 테이블 : 특정 번호의 해당하는 데이터를 찾고자 할때, 그 데이터가 어떤 박스에 있는지 알 수 있고, 빠르게 찾음
// 해시 테이블 단점 : 박스를 많이 준비해야해서 메모리상으로는 손해
// [메모리를 내주고, 성능을 취한다]
// Dictionary 특징 : Key를 알면 Value를 굉장히 빠르게 찾을 수 있음
// 단, 거꾸로 Value를 알고있다고 키를 빠르게 찾을 수는 없음
Dictionary<int, Monster> dic = new Dictionary<int, Monster>();
// 2가지 방법으로 추가 가능
// dic.Add(1, new Monster(1));
// dic[5] = new Monster(5);
for(int i = 0; i < 10000; i++)
{
dic.Add(i, new Monster(i));
}
// 5000번의 key가 없다면 프로그램이 뻗을 수 있음(Crash가 발생)
// Monster mon = dic[5000];
// Monster mon = dic[20000]; // KeyNotFoundException 에러 발생
// 에러가 발생할 수 있어서 바로 접근하는 것은 위험함
// TryGetValue(key, out value)로 찾으면 됨 => crash 발생 안함
// return bool(찾았다면 true)
Monster mon;
bool found = dic.TryGetValue(20000, out mon);
// 삭제
// .Remove(key) : key에 해당하는 정보가 삭제됨
// dic.Remove(7777);
// 전체 삭제
// dic.Clear();
}
}
}
출처
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문| Rookiss - 인프런 강
현재 평점 4.9점 수강생 6,987명인 강의를 만나보세요. 기초 프로그래밍 지식이 없는 사람들을 위한 C# 프로그래밍 기초 강의입니다. 문법 암기 위주의 수업이 아니라, 최대한 필요한 부분만을 요
www.inflearn.com
53강 Dictionary
'C# > 기본 문법' 카테고리의 다른 글
| C# List (0) | 2025.11.20 |
|---|---|
| C# 다차원 배열, GetLength() (0) | 2025.11.20 |
| C# 배열 연습문제 (0) | 2025.11.18 |
| C# 배열 (0) | 2025.11.13 |
| C# TextRPG2 (0) | 2025.11.13 |