YangDK
개발 공부
YangDK
전체 방문자
오늘
어제
  • 개발 공부 시작 (22)
    • GitHub (2)
    • JAVA (1)
    • 시스템 프로그래밍(윈도우) (1)
    • C# (6)
    • 자바스크립트 (1)
    • 프로젝트 제작 (1)
    • 연습 프로젝트 (2)
    • HTTP (1)
    • 타입스크립트 (0)
    • 오류 해결 (0)
    • React (1)
    • 컴퓨터 구조 (1)
    • 자료구조 & 알고리즘 (1)
    • HTML (1)
    • CSS (1)
    • 프로그래머스 (1)
    • IT 기기 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • dashboard
  • landing
  • programmers
  • Page
  • GiGABYTE
  • 메인화면
  • 기가바이트
  • Dev-Matching
  • LandingPage
  • 프로그래머스
  • 프론트엔드
  • 메인보드
  • 빅오
  • Big O
  • Front-end
  • 웹 개발 공부
  • b650
  • 자료구조
  • b650m k
  • css

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
YangDK

개발 공부

C#

Dictionary

2021. 5. 13. 21:59

Dictionary 사용 시 대용량 데이터를 처리하는 시간이 List보다 효율적이다.

RPG 게임의 경우 다양한 몬스터와 이벤트를 처리할 떄 각각 key값을 부여해 클라이언트와 서버간의

연동을 통해 게임이 진행된다.

위처럼 RPG게임과 같이 빠른 데이터 처리를 필요로 할때 C#에서 지원하는 Dictionary를 사용할 수 있다.

 

사용 방법

=> Dictionary<TKey, TValue>

ex)

class Player

{

      public int id;

 

      public Player(int id) { this.id = id; }

}

 

static void Main(string[] args)

{

      Dictionary<int, Player> dic = new Dictionary<int, Player>();

}

 

키(int)를 통해 Value(Player)를 매우 빠르게 찾을 수 있다, 이와 반대로 Value(Player)를 통해 해당 키(int)를 찾을 수는 없다.

 

Dictionary에 값 추가하는 방법

 

static void Main(string[] args)

{

      Dictionary<int, Player> dic = new Dictionary<int, Player>();

}

 

=>

static void Main(string[] args)

{

      Dictionary<int, Player> dic = new Dictionary<int, Player>();

      dic.Add(1, new Player(1));     // 1번 id를 지닌 플레이어 추기

      dic[3] = new Player(3);        //  3번 id를 지닌 플레이어 추가

}

 

for문 사용하여 추가하기

 

for(int i; i< 100; i++)

{

      dic.Add(i, new Player(i));

}

 

Dictionary 값 확인하기

 

=> Player play = dic[3];

 

지정하지 않은 Dictionary 번호를 호출할 경우 오류가 발생한다. C#에서는 이러한 상황을 위해 함수를

제공한다.

 

=> dic.TryGetValue() = .TryGetValue()를 사용할 경우 key번호와 out을 사용한다.

ex)

Player play;

bool check = dic.TryGetValue(2, out play);

 

삭제하기

=> dic.Remove(key) = 삭제하고 싶은 key값을 입력할 경우 해당 key의 값이 삭제된다.

=> dic.Clear() = dic에 지정되있는 모든 key값을 삭제한다.

 

Dictionary가 빠르게 데이터를 처리할 수 있는 이유

Dictionary는 *Hashtable을 사용한다.

 

*Hashtable이란?

ex)

1. 하나의 서랍에 100개의 공이 들어 있다, 이때 35번 숫자의 공을 찾고 싶다.

   이 경우 일반적으론 35번의 공을 찾기 위해 일치하는 번호의 공을 찾을 때까지 모든 공을 찾아봐야 한다.

2. 위와 달리 100개의 공을 하나의 서랍에 몰아 넣는 것이 아닌 10개의 공을 여러 서랍에 나눠 넣는다.

    [10개],[10개],[10개]....[10개]로 하여 총 10개의 서랍에 나눈다.

   이 경우 35번의 공을 찾기 위해서는 31~40번의 공이 있는 4번째 서랍을 찾으면 된다.

1번과 2번 중에 더 빠르게 찾고 싶은 데이터를 얻을 수 있는 것은 2번의 경우이다.

Hashtable이란 2번의 방식과 비슷하다.

 

단 위처럼 여러 서랍을 사용해야 하기 때문에 많은 공간(메모리)를 사용하게 된다는 단점이 있다.

이러한 단점을 유의하여 사용하는 것을 권장한다.

'C#' 카테고리의 다른 글

객체지향  (0) 2021.05.14
추상클래스, 인터페이스  (0) 2021.05.14
Generic(일반화)  (0) 2021.05.14
다차원 배열  (0) 2021.05.13
배열  (0) 2021.05.12
    'C#' 카테고리의 다른 글
    • 추상클래스, 인터페이스
    • Generic(일반화)
    • 다차원 배열
    • 배열
    YangDK
    YangDK

    티스토리툴바