🌟 C# List Pattern😋 🌟
안녕하세요. 박민성입니다. ☺️
오늘은 C#의 List Pattern에 대해서 글을 쓰고자 합니다. 🤔
1. List Pattern이란?
List Pattern은 배열이나 리스트 같은 순차 데이터의 요소와 구조를 패턴으로 검사하는 기능입니다. 전에 작성했던 패턴 매칭의 한 종류입니다.
int[] numbers = { 1, 2, 3 };
if (numbers is [1, 2, 3])
{
Debug.Log("일치");
}
여기서! [1, 2, 3]은 새로운 배열을 만드는 코드가 아닌 패턴입니다.
위 코드는 numbers가 정확히 1, 2, 3이라는 구조를 가지고 있는가요? 를 if로 검사하는 코드입니다.
2. 기본 사용법
컬렉션 is [패턴1, 패턴2, 패턴3]
이런 형태로 사용할 수 있습니다.
int[] numbers = { 10, 20, 30 };
if (numbers is [10, 20, 30])
{
Debug.Log("같음");
}
각 위치를 순서대로 검사해.
index 0이 10인가요?, index 1 → 20인가요?, index 2 → 30인가요?
전부 맞으면 true입니다.
여기서 중요한 점은 배열의 길이도 같이 검사한다는 점입니다.
int[] numbers = { 1, 2, 3, 4 };
if (numbers is [1, 2, 3])
{
}
이 if문은 false가 나옵니다.
요소가 정확히 3개이고, 각각 1, 2, 3인지 검사하는 것입니다.
Microsoft 문서에서도 List Pattern을 시퀀스의 형태(shape)를 검사하는 패턴으로 설명합니다.
3. _ discard 사용하기
특정 위치의 값은 상관없다면 _를 사용할 수 있습니다.
int[] numbers = { 10, 999, 30 };
if (numbers is [10, _, 30])
{
Debug.Log("일치");
}
여기서 _는 어떤 값이든 상관없음을 나타냅니다.
하지만.
여전히 요소 개수는 비교하는 것과 같아야 합니다.
4. .. Slice Pattern 사용하기
int[] numbers = { 1, 2, 3, 4, 5 };
if (numbers is [1, .., 5])
{
Debug.Log("일치");
}
이런식으로 신기하게 작성할 수 있습니다.
이 코드의 뜻은
첫 번째 요소 = 1, 중간 = 몇 개든 가능, 마지막 요소 = 5 이라는 뜻입니다.
그렇기 때문에!
1, 5
1, 2, 5
1, 2, 3, 4, 5
이런 배열들이 true가 나오기 때문입니다.
모두가 첫 번째 요소가 1로 시작해서 중간은 상관없이 마지막 요소가 5로 끝납니다.
..는 여기서 Slice Pattern이라고 불립니다. 한 List Pattern 내부에서 slice pattern은 직접적으로 한 번만 사용할 수 있습니다.
전에 글로 작성했던 numbers[1..4] 배열 길이에 대한 ..은 현재 List Pattern에서 사용하는 ..과 다른 문법입니다.
5. 값뿐만 아니라 타입도 검사 가능
object[] values = { 10, "Sword" };
if (values is [int, string])
{
Debug.Log("int와 string");
}
첫 번째 요소가 int, 두 번째 요소가 string인지 검사합니다.
🌟🌟🌟 여기서ㅇㄴㅁㅇㄴㅁㅇ
여기서 중요!!
List Pattern은 패턴 검사와 동시에 값을 변수에 저장하여 사용할 수 있습니다.
if (values is [int damage, string weaponName])
{
Debug.Log(damage);
Debug.Log(weaponName);
}
var를 사용할 수도 있습니다.
6. 관계 패턴과 같이 사용하기
>, <, >=, <= 이런 비교 연산자를 사용할 수 있습니다.
int[] stats = { 100, 50 };
if (stats is [> 0, > 0])
{
Debug.Log("둘 다 0보다 큼");
}
int[] numbers = { 10, 50, 90 };
if (numbers is [< 20, _, > 80])
{
Debug.Log("조건 만족");
}
이렇게 List Pattern 안에서 다른 패턴을 조합할 수 있습니다. C#의 패턴들은 서로 조합해서 사용할 수 있습니다.
7. switch와도 사용 가능
List Pattern은 is에서만 사용하는 게 아닙니다.
string Check(int[] numbers)
{
return numbers switch
{
[] => "비어있음",
[0] => "0 하나",
[1, 2] => "1과 2",
[1, ..] => "1로 시작함",
[.., 9] => "9로 끝남",
_ => "기타"
};
}
이런 식으로 배열의 구조에 따라 처리할 수도 있습니다.
오늘은 C#에 List Pattern에 대해서 알아보았습니다.
전에 소개했더 패턴 매칭과 이어지는 내용이 있었습니다.
방학이 얼마남지 않았습니다.... 8월 17일.... 다음주 월요일.... 기숙사에 들어갑니다...
하지만!!!!! 저는 학교생활이 즐겁다고 생각하기에 큰 걱정은 없습니다 ㅎㅎ 😊
걱정이 좀 있긴 하지만...
오늘의 노래 추천은
BellyJay - MONTAGEM HIKARI 이라는 노래입니다.
제가 펑크 중에서 가장 좋아하는 곡입니다.
요즘 추천할 곡이 점점 떨어져 나갑니다;
내일은 더욱 좋은 글을 써보도록 노력해보겠습니다.
봐주셔서 감사합니다. ☺️