컬렉션이란
컬렉션은 자료를 모아 놓은 데이터 구조를 의미합니다.
컬렉션을 사용하는 이유
C#에서 배열은 크기를 정해두고 있어 배열의 내용을 수정하고 싶을 때 새로운 배열을 만들어
복사를 해야합니다. 컬렉션은 배열과 비슷한 구조를 가지고 있어서 데이터 처리에 있어 배열을
사용하기 불편할 때 사용합니다.
C#에서 제공하는 컬렉션을 사용하려면
System.Collections.Generic 네임스페이스를 추가하여야합니다.
컬렉션의 종류
List
리스트와 배열의 차이점은 가변적인 크기를 가지고 있다는 것입니다.
리스트는 동적으로 크기를 조절할 수 있어 배열보다 유연하지만 단점도 있는데
배열보다 많은 메모리를 사용하여 성능 저하를 유발할 수 있어 무분별한 사용은 지양해야합니다.
따라서 데이터의 크기와 사용목적을 고려하여 적절한 자료구조를 사용하여야합니다.
리스트를 생성
List<자료형> 리스트 이름 = new List<자료형>();
리스트의 내용 수정
리스트 이름.Add(추가하려는 내용); ex) list.Add(1);
리스트 이름. Remove(삭제하려는 내용); ex)list.Remove(2);
리스트 인덱싱
리스트를 인덱싱 하는 형태는 foreach 문을 사용하거나 배열처럼 대괄호를 이용한 형태로도
인덱싱이가능하다.
//foreach 문을 사용한 인덱싱
foreach (int i in list)
{
Console.WriteLine(i);
}
//배열처럼 대괄호를 통한 인덱싱
for (int i = 0 ; i<list.Count; i++) //list는 length를 쓰는 것이 아닌 Count를 써서 list의 크기를 나타낼수 있다.
{
Console.WriteLine(list[i]);
}
Dictionary
딕셔너리는 키와 값으로 구성된 데이터를 저장합니다.
중복된 이름의 키를 가질 수 없고 키와 값을 한 쌍으로 묶어 저장합니다.
딕셔너리를 생성할 때
Dictionary<키 자료형,값 자료형> 딕셔너리 이름 = new Dictionary<키 자료형,값 자료형>();
ex) Dictionary<string,int> score = new Dictionary<string,int>();
딕셔너리에 데이터를 수정할 때
딕셔너리에 데이터를 추가할 때:
딕셔너리 이름.Add(키 이름,값 내용);
ex)score.Add("key name",100);
딕셔너리에 데이터를 삭제할 때:
딕셔너리 이름.Remove(키 이름)
ex)score.Remove("key name");
인덱싱을 할 때 foreach 를 사용합니다.
foreach(KeyValuePair <키 자료형,값 자료형> pair in 딕셔너리 이름)
{
Console.WriteLine(pair.key +""+pair.Value);
}
ex)
foreach(KeyValuePair <string,int> pair in score)
{
Console.WriteLine(pair.key +""+pair.Value);
}
Stack
스택은 후입선출(LIFO) 구조를 띄고있습니다.
즉 가장 마지막에 들어온 데이터를 내보낼 수 있습니다.
스택을 선언할 때
Stack<자료형> 스택이름 = new Stack<자료형>();
스택에 내용 추가
스택 이름.Push(값);
스택에서 내용 가져오기
Name_Stack.Push(1);
Name_Stack.Push(2);
Name_Stack.Push(3);
int value = Name_Stack.Pop();
스택에서 내용을 가져올 때 가장 마지막에 들어온 데이터를 먼저 내보내므로 위의 코드에서 추출되는
데이터는 3입니다.
Queue
큐큐는 선입선출(FIFO) 구조를 가지고 있습니다.
스택과 다르게 맨 먼저 들어온 데이터를 먼저 내보냅니다.
큐를 선언할 때
Queue<자료형> 큐 이름 = new Queue<자료형>();
Queue에 내용을 추가할 때
큐 이름.Enqueue();
Queue에서 내용 가져오기
Name_Queue .Enqueue(1);
Name_Queue .Enqueue(2);
Name_Queue .Enqueue(3);
int value = Name_Queue.Dequeue();
위에선 가장 먼저 들어온 데이터가 1이므로 1을 값을 먼저 내보냅니다.
HashSet
해쉬셋은 리스트와 유사하지만 중복되지않은 데이터로 이루어져 있습니다.
해쉬셋 선언
HashSet<자료형> 해쉬셋 이름 = new HashSet<자료형>();
해쉬셋에 내용 추가
해쉬셋.Add(값);
해쉬셋에서 내용 가져오기
foreach (자료형 element in 해쉬셋 이름)
{
Console.WriteLine(element);
}