List(리스트)란?
- 리스트는 c#에서 제공하는 동적 배열을 나타내는 데이터 구조입니다. 여기서 동적 배열이란 일반적으로 크기가 고정된 배열과 달리 크기를 자유롭게 조절할 수 있습니다. 예를들면, 끝이 정해지지 않은 무한열차...라고 생각하시면 될 것 같습니다.
- using System.Collection.Generic; 를 네임스페이스에 적어야 사용할 수 있습니다.
- 위에서 말했다시피 리스트의 가장 큰 장점은 배열과 달리 방의 개수를 정하지 않아도 된다는 것입니다. 배열은 방의 개수 또는 값을 할당해서 선언해줘야하는데, 리스트는 그러지 않아도 선언과 초기화가 되기 때문입니다.
//int형 값을 가질 수 있는 비어있는 리스트 생성.
List<int> listInt = new List<int>();
//해당 데이터 값을 리스트에 직접 할당.
List<int> listInt2 = new List<int> { 1, 2, 3, 4, 5 };
List(리스트)를 사용해보자!
1. Add(T item) - 리스트에 값 추가
- Add()는 리스트에 넣고싶은 값을 추가하는 매서드입니다. 괄호 안에 해당 리스트와 같은 데이터 형식의 값을 넣어주시면 됩니다.
//int형 데이터 값을 가질 수 있는 리스트.
List<int> listInt = new List<int>();
listInt.Add(10);
listInt.Add(20);
listInt.Add(30);
//string형 데이터 값을 가질 수 있는 리스트.
List<string> listString = new List<string>();
listString.Add("리스트는");
listString.Add("동적 배열");
listString.Add("끝이 없지");
2. AddRange - 리스트에 다른 리스트를 추가
- AddRange는 리스트에 다른 리스트를 추가하는 것입니다. 단, 데이터 타입이 다르다면 에러가 뜹니다.
//int형 데이터 값을 가질 수 있는 리스트.
List<int> listInt = new List<int>();
listInt.Add(10);
listInt.Add(20);
listInt.Add(30);
List<int> addRangeList = new List<int> { 40, 50, 60 };
listInt.AddRange(addRangeList);
//리스트를 콘솔창에 출력할 때는 foreach문을 사용하는 것이 좋다.
//for문은 반복 횟수가 정해져 있기 때문.
foreach (var item in listInt)
{
Debug.Log(item);
}
3. Remove(T item) - 특정 요소 제거
- Remove()는 괄호 안의 값을 해당 리스트 안에서 제거합니다. 단, 만약 리스트 안에 같은 값이 여러 개가 존재하여 Remove를 여러 번 해주면 앞에 있는 값부터 제거됩니다. 또한 리스트는 값을 제거하는 순간 그 방의 존재도 사라지게 되며 아래 예제처럼 진행하면 20이 0번방의 값이 되는 겁니다.
//int형 데이터 값을 가질 수 있는 리스트.
List<int> listInt = new List<int> { 10, 10, 20, 10, 30, 10 };
//listInt리스트에서 10을 3번 제거.
listInt.Remove(10);
listInt.Remove(10);
listInt.Remove(10);
foreach (var item in listInt)
{
Debug.Log(item);
}
4. RemoveAt(int index) - 지정된 방 번호의 값을 제거
- RemoveAt()은 괄호 안의 인덱스 즉, 방 번호에 해당하는 값을 제거합니다.
//int형 데이터 값을 가질 수 있는 리스트.
List<int> listInt = new List<int> { 10, 10, 20, 10, 30, 10 };
//listInt 리스트에서 2번방의 값을 제거.
listInt.RemoveAt(2);
foreach (var item in listInt)
{
Debug.Log(item);
}
5. RemoveAll(Predicate <T> match) - 특정 값을 리스트에서 전부 제거
- RemoveAll()은 괄호 안의 값을 해당 리스트에서 전부 제거합니다.
- Predicate는 bool형식의 컬렉션입니다. 즉 true or false를 판단하는 것입니다. 그래서 람다식을 사용해주었습니다. 내가 제거하려는 값이 리스트에 있는지 없는지 판단한 후 있으면 true, 해당 값을 전부 제거합니다. 반대로 false, 해당 값이 리스트에 없으면 아무것도 하지 않습니다.
//int형 데이터 값을 가질 수 있는 리스트.
List<int> listInt = new List<int> { 10, 10, 20, 10, 30, 10 };
//리스트에 10이 존재하기 때문에 10을 제거.
listInt.RemoveAll(x => x == 10);
//리스트에 50이 존재하지 않기 때문에 아무것도 안함.
listInt.RemoveAll(x => x == 50);
foreach (var item in listInt)
{
Debug.Log(item);
}
6. Count - 리스트의 길이
- 해당 리스트의 길이 즉, 방의 개수를 리턴합니다.
List<int> listInt = new List<int> { 10, 10, 20, 10, 30, 10 };
int num = listInt.Count;
Debug.Log(num);
7. Clear() - 전부 제거
- 해당 리스트의 모든 값을 제거합니다.
8. Contain(T item) - 리스트에 특정 요소가 포함되어 있는지 여부를 확인
List<int> listInt = new List<int> { 10, 10, 20, 10, 30, 10 };
bool contain30 = listInt.Contains(30);
bool contain50 = listInt.Contains(50);
Debug.Log(contain30);
Debug.Log(contain50);
'C# > 자료구조 이해하기' 카테고리의 다른 글
C# 연결리스트(Linked List)에 대해 알아보자! (0) | 2024.03.13 |
---|---|
C# 오름차순과 내림차순 정렬에 대해 알아보자! (0) | 2024.03.10 |
C# Dictionary에 대해 알아보자! (0) | 2024.03.05 |
C# 스택(Stack)에 대해 알아보자! (0) | 2024.03.05 |
C# 큐(Queue)에 대해 알아보자! (0) | 2024.03.05 |