본문 바로가기
Tech Review : Unity & C#

C# 문법 : switch문, 컬렉션(배열, 리스트, 딕셔너리)

by chrn0907 2023. 11. 11.

1. Switch 문

 

switch 문의 기본형은 다음과 같습니다.

switch (조건의 대상이 되는 변수)
{
    case 조건값1 :
        조건값1이 참일 경우 실행;
        break;
    case 조건값2 :
        조건값1이 참일 경우 실행;
        break;
    case 조건값3 :
        조건값1이 참일 경우 실행;
        break;
    case 조건값4 :
        조건값1이 참일 경우 실행;
        break;
    default :
        위의 조건값에 해당하지 않는 경우에 실행;
        break;  
}

 

- 변수의 값이 case로 분류할 수 있는 것이 명확할 때, 사용할 수 있습니다.

 

예제) 숫자를 입력 받아 입력한 숫자가 어떤 case에 해당하는지 판별한다.

using System;

namespace MyFirstApp
{
    class Program
    {
        static void Main(String[] args)
        {
            int input = 0;
           
            Console.Write("1~5까지의 숫자를 입력하세요 : ");
            input = Convert.ToInt32(Console.ReadLine());
           
            switch(input)
            {
                case 1:
                Console.WriteLine("1을 입력하셨습니다.");
                break;
                case 2:
                Console.WriteLine("2를 입력하셨습니다.");
                break;
                case 3:
                Console.WriteLine("3을 입력하셨습니다.");
                break;
                case 4:
                Console.WriteLine("4를 입력하셨습니다.");
                break;
                case 5:
                Console.WriteLine("5를 입력하셨습니다.");
                break;
                default:
                Console.WriteLine("1 ~ 5 외의 숫자를 입력하셨습니다.");
                break;
            }
        }
    }
}

 

 

 

2. 컬렉션(Collection)

 

컬렉션(Collection)

: C#에서 지원하는 여러 데이터의 검색과 저장을 위해 특화된 자료구조 클래스

- List, ArratList, Dictionary, HashTable, Stack,Queue 등

 

(1) 배열(Array)

- 고정된 배열 크기로, 선언시 크기를 지정해주고, 삭제 및 추가와 같은 변형이 불가능하다.

- 같은 타입만 저장이 가능하다.

- 다차원 배열 입력이 가능하다.

 

배열 선언

int[] Array_Name1 = new int[5];  //데이터타입[] 배열 이름 = new 데이터타입[배열의 길이(개수)]

int[] Array_Name2 = {1,2,3,4,5};  //배열을 초기화하면서 데이터 값을 바로 넣어주는 방식입니다.
//Array_Nave[0] = 1

- 배열의 index는 0부터 시작합니다. 

- 위의 예시에서 Array_Name2[0]에는 1이 들어가고, [1],[2],[3],[4]에는 2,3,4,5 데이터값이 순차적으로 들어갑니다. 

 

배열의 길이 조절

- 배열의 길이는 일반적으로는 잘 바꾸지 않으며, 바꿔야 할때는 Resize코드로 변경 가능합니다.

int[] Array_Name = {1,2,3,4,5};
// 위의 배열의 길이를 10으로 늘리기 위한 코드는 다음과 같습니다.
System.Resize(ref Array_Name, 10);또는,Array_Name = (int[])ResizeArray(Array_Name, 10);

 

 

 

(2) 리스트(List)

- 배열 크기가 고정되지 않아 삭제 및 추가가 가능하다.

- 같은 타입끼리만 저장이 가능하다.

- 박싱 및 언박싱이 발생하지 않는다.

 

List 선언

List<데이터타입> 변수이름 = new List<>();

- 리스트를 처음 선언했을 때, 리스트의 길이는 0입니다.

 

Add(배열 추가)

List<string> myString = new List<>();
myString.Add("one");
myString.Add("two");
myString.Add("three");

- myString :  [0]"one", [1]"two", [2]"three"

- 새로 추가하는 데이터 값들은 배열의 뒤에 추가됩니다.

 

Index(배열 삽입)

myString.Insert(0,"Insert");

0번 인덱스에 "Insert"를 삽입해줍니다.

기존의 0번 인덱스에 있던 데이터값은 1번 인덱스로 가는 등, 하나씩 뒤로 밀려나게 됩니다.

myString :  [0]"Insert", [1]"one", [2]"two", [3]"three"

 

Remove, RemoveAt(배열 삭제)

myString.Remove("two");   //데이터를 찾아서 삭제. myString :  [0]"Insert", [1]"one", [2]"three"
myString.RemoveAt(0);      //해당하는 인덱스의 데이터 삭제. myString :  [0]"one", [1]"three"

 

Contains(리스트 안에 데이터가 있는지 찾아서 true/false 반환)

Debug.Log(myString.Contains("three"));   //true 출력.

 

BinarySearch(List안의 데이터가 몇번 인덱스에 있는지 인덱스를 반환)

Debug.Log(myString.BinarySearch("three"));   //1번 출력. 

 

Clear(리스트 초기화)

myString.Clear();
Debug.Log(myString.Count);   //0개 출력.

 

Sort(정렬)

: 배열을 정렬해주는 함수입니다.

int 타입이라면 오름차순으로, string(또는 char) 타입이라면 알파벳순으로 정렬해줍니다.

 

 

 

(3) 딕셔너리(Ditionary)

- key와 value를 사용해서 자료를 저장하는 타입

- 선언 시 미리 타입을 설정하기 때문에 입출력 시 박싱, 언박싱이 일어나지 않습니다. 따라서 다른 타입으로 변환하는 경우에도 오류가 생길 우려가 없습니다.

 

Dictionary 선언

var dictionary = new Dictionary<string, int>();

or

var dic = new Dictionary<string, int>()  //바로 값 입력.
{
    {"a", 10}, 
    {"b", 12},    
    {"c", 14}
}

 

Add (추가)

dictionary.Add("a", 10);
dictionary.Add("b", 12);
dictionary.Add("c", 14);

int d = dictionary["a"];   // b = 10

 

ContainsKey (Key 검색)

Debug.Log(dictionary.ContainsKey("a"));  // "a" 문자열이 존재할 경우 true, 아닐 경우 false를 return.

 

TryGetValue (Key를 통해 값을 반환)

int d = 0; // value와 같은 타입
if(dictionary.TryGetValue("b", out d))      // "b" 문자열이 존재할 경우 true, 아닐 경우 false를 return.
    Debug.Log(a);  // 12가 찍힘.

if(dictionary.TryGetValue("c", out int aa))
     Debug.Log(aa);  // 변수 선언을 미리하지 않아도 14가 찍힘.

 

KeyValuePair (Dictionary 안에 있는 데이터 foreach로 확인)

foreach(KeyValuePair<string, int> p in dictionary)
{
    Debug.Log(p.Key+","+ p.Value);
}

또는 var를 사용해도 됩니다.

foreach(var p in dictionary)
{
    Debug.Log(p.Key+","+ p.Value);
}

 

Remove

dictionary.Remove("a")

 

 

 

 

 

 

출처 |

[C# 입문] if 문 과는 다르게 쓸 수 있는 switch 문  -  https://studium-anywhere.tistory.com/49

 

[C# 입문] if 문 과는 다르게 쓸 수 있는 switch 문

앞서 우리는 if문에 대해 배워보았습니다. [C#] 프로그래밍의 꽃 if문 if문에서는 어떤 상황을 가정하며 상황에 맞는 결과를 출력 혹은 행동할 수 있게끔 프로그램을 이끌어가는 하나의 흐름으로

studium-anywhere.tistory.com

 

일반적으로 사용되는 컬렉션 형식 - https://learn.microsoft.com/ko-kr/dotnet/standard/collections/commonly-used-collection-types

 

일반적으로 사용되는 컬렉션 형식 - .NET

해시 테이블, 쿼리, 스택, 모음, 사전, 목록과 같이 .NET에서 일반적으로 사용되는 컬렉션 형식에 대해 알아봅니다.

learn.microsoft.com

 

C#배열,컬렉션(Collection) 자료구조 정리https://blog.naver.com/tutorials_korea/221610337593

 

C#배열,컬렉션(Collection) 자료구조 정리

C# 자료구조 정리 아래의 링크를 클릭해서 보세요. (링크 없는 글은 향후 추가 예정) 1. C# 자료구조 정...

blog.naver.com

 

[C# 기초] #11 : Collection(List, ArrayList) - https://geukggom.tistory.com/92

 

[C# 기초] #11 : Collection(List, ArrayList)

안녕하세요! 극꼼입니다! 오늘부터는 Collection중 List와 ArrayList에 대해 배워보겠습니다 ㅎㅎ * Collection : https://geukggom.tistory.com/95 [서론] 자료구조 : 데이터를 구조적으로 구현하는 알고리즘 Collectio

geukggom.tistory.com

 

[C# 기초] #12 : Collection(Dictionary, HashTable)  - https://geukggom.tistory.com/96

 

[C# 기초] #12 : Collection(Dictionary, HashTable)

[서론] 자료구조 : 데이터를 구조적으로 구현하는 알고리즘 Collection : C#에서 지원하는 자료구조 클래스. List, ArrayList, Dictionary, HashTable, Stack, Queue 등이 있음. 이번 포스팅에서는 이 중 Dictionary, Hash

geukggom.tistory.com