본문 바로가기

C#/기본 문법

C# Dictionary

 

 

 

 

전체 코드


 

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();
        }
    }
}

 

 

 

 

 

 

 


 

 

 

출처


https://www.inflearn.com/course/%EC%9C%A0%EB%8B%88%ED%8B%B0-mmorpg-%EA%B0%9C%EB%B0%9C-part1?srsltid=AfmBOopkXVxKs-MQPYZkTjEYW-yIDMO5xP7l5hQq0hQasUWhobvyKO6N

 

[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