[C#] 배열, 컬렉션(list, Dictionary, Stack, Queue, Hashset) ⭐⭐

업데이트:

카테고리:

태그: ,


조건문, 반복문, 배열, 컬렉션(list, Dictionary, Stack, Queue, Hashset)

C# 배열, 컬렉션(list, Dictionary, Stack, Queue, Hashset)

C# 배열, 컬렉션








1. C# 배열

// 배열 선언
데이터_유형[] 배열_이름;

// 배열 초기화
배열_이름 = new 데이터_유형[크기];

// 배열을 한 줄로 선언 및 초기화
데이터_유형[] 배열_이름 = new 데이터_유형[크기];

// 배열 요소에 접근
배열_이름[인덱스] = ;
 = 배열_이름[인덱스];

int[] array1 = new int[5];
  • 동일한 데이터 유형을 가지는 데이터 요소들을 한 번에 모아서 다룰 수 있는 구조
  • 인덱스를 사용하여 요소에 접근 가능
  • 선언된 크기만큼의 공간을 메모리에 할당받음
  • list..Length = 배열의 길이



다차원 배열

int[,] array3 = new int[2, 3]; // 2D 2행 3열
int[,,] array3D = new int[2, 3, 4]; // 3D 2면 3행 4열이   3행4열이 2개
  • 2D 2행 3열
  • 3D 2면 3행 4열      3행4열이 2개
  • 여러 개의 배열을 하나로 묶어 놓은 배열
  • 행과 열로 이루어진 표 형태와 같은 구조
  • 2차원, 3차원 등의 형태의 배열을 의미
  • C#에서는 다차원 배열을 선언할 때 각 차원의 크기를 지정하여 생성합니다.



배열을 이용한 맵

int[,] map = new int[5, 5] 
{ 
    { 1, 1, 1, 1, 1 }, 
    { 1, 0, 0, 0, 1 }, 
    { 1, 0, 1, 0, 1 }, 
    { 1, 0, 0, 0, 1 }, 
    { 1, 1, 1, 1, 1 } 
};

for (int i = 0; i < 5; i++)
{
    for (int j = 0; j < 5; j++)
    {
        if (map[i, j] == 1)
        {
            Console.Write("■ ");
        }
        else
        {
            Console.Write("□ ");
        }
    }
    Console.WriteLine();
}

image








컬렉션

  • 컬렉션은 배열과 비슷한 자료 구조
  • 배열과는 다르게 크기가 가변적
  • C#에서는 다양한 종류의 컬렉션을 제공
  • 사용하기 위해서는 System.Collections.Generic 네임스페이스를 추가



List

  • List는 가변적인 크기를 갖는 배열
  • List를 생성할 때는 List에 담을 자료형을 지정
List<int> numbers = new List<int>(); // 빈 리스트 생성
numbers.Add(1); // 리스트에 데이터 추가
numbers.Add(2);
numbers.Add(3);
numbers.Remove(2); // 리스트에서 데이터 삭제

foreach(int number in numbers) // 리스트 데이터 출력
{
    Console.WriteLine(number);
}



Dictionary

  • 딕셔너리(Dictionary)는 키와 값으로 구성된 데이터를 저장
  • 딕셔너리는 중복된 키를 가질 수 없으며, 키와 값의 쌍을 이루어 데이터를 저장
using System.Collections.Generic;

Dictionary<string, int> scores = new Dictionary<string, int>(); // 빈 딕셔너리 생성
scores.Add("Alice", 100); // 딕셔너리에 데이터 추가
scores.Add("Bob", 80);
scores.Add("Charlie", 90);
scores.Remove("Bob"); // 딕셔너리에서 데이터 삭제

foreach(KeyValuePair<string, int> pair in scores) // 딕셔너리 데이터 출력
{
    Console.WriteLine(pair.Key + ": " + pair.Value);
}
Key Value
Alice 100
Bob 80
Charlie 90

Bob Remove



Stack

  • Stack은 후입선출(LIFO) 구조를 가진 자료 구조
Stack<int> stack1 = new Stack<int>();  // int형 Stack 선언

// Stack에 요소 추가
stack1.Push(1);
stack1.Push(2);
stack1.Push(3);

// Stack에서 요소 가져오기
int value = stack1.Pop(); // value = 3 (마지막에 추가된 요소)

image



Queue

  • Queue는 선입선출(FIFO) 구조를 가진 자료 구조
Queue<int> queue1 = new Queue<int>(); // int형 Queue 선언

// Queue에 요소 추가
queue1.Enqueue(1);
queue1.Enqueue(2);
queue1.Enqueue(3);

// Queue에서 요소 가져오기
int value = queue1.Dequeue(); // value = 1 (가장 먼저 추가된 요소)

image



Hashset

  • 리스트랑 비슷, 중복X
HashSet<int> set1 = new HashSet<int>();  // int형 HashSet 선언

// HashSet에 요소 추가
set1.Add(1);
set1.Add(2);
set1.Add(3);

// HashSet에서 요소 가져오기
foreach (int element in set1)
{
    Console.WriteLine(element);
}








3. 배열과 리스트의 차이

리스트는 동적, 유연한 데이터 구조를 구현할 수 있습니다. 하지만, 리스트를 무분별하게 사용하는 것은 좋지 않은 습관입니다.

  • 1.  메모리 사용량 증가 : 리스트는 동적으로 크기를 조정할 수 있어 배열보다 많은 메모리를 사용합니다.
  • 2.  데이터 접근 시간 증가 : 리스트에서 특정 인덱스의 데이터를 찾기 위해서는 연결된 노드를 모두 순회 .
  • 3.  코드 복잡도 증가 : 데이터 추가, 삭제 등의 작업을 적절히 처리하는 코드를 작성
  • 따라서, 리스트를 무분별하게 사용하는 것은 좋지 않은 습관입니다. 데이터 구조를 선택할 때는, 데이터의 크기와 사용 목적을 고려하여 배열과 리스트 중 적절한 것을 선택해야 합니다.








정리 잡답

  • 컬렉션 list, Dictionary, Stack, Queue, Hashset
  • 배열의 길이는 length 컬렉션의 길이는 count




[C#] C# 배열, 컬렉션(list, Dictionary, Stack, Queue, Hashset)


참고 : 유니티 C#
TOP


📔

댓글남기기