반응형
C# 8은 여러 가지 새로운 기능을 가져왔는데, 그 중 하나는 컬렉션의 인덱싱과 슬라이싱을 위한 새로운 System.Index 및 System.Range 타입입니다. 이 글에서는 이러한 추가 기능에 대해 자세히 알아보고, 더 간결하고 표현력 있는 코드를 작성하는 방법을 소개하겠습니다.
System.Index
C# 8 이전에는 배열이나 리스트에서 끝에서부터 요소에 접근하려면 일부 계산을 수행해야 했습니다. System.Index를 사용하면 이 과정이 더 직관적으로 됩니다.
code int[] numbers = { 0, 1, 2, 3, 4, 5 };
Index lastElement = ^1; // 마지막 요소를 나타냅니다.
Console.WriteLine(numbers[lastElement]); // 출력: 5
^ 연산자는 끝에서부터 세기 위해 사용됩니다. 따라서 ^1은 마지막 요소를 의미하며, ^2는 끝에서 두 번째 요소를 의미합니다.
System.Range
System.Index가 단일 요소에 쉽게 접근할 수 있게 해주었다면, System.Range는 일련의 요소를 선택할 수 있도록 해주어 슬라이싱을 간단하게 만들어줍니다.
code int[] numbers = { 0, 1, 2, 3, 4, 5 };
Range firstThree = 0..3; // 인덱스가 0부터 2까지인 요소들을 선택합니다.
int[] subset = numbers[firstThree]; // 출력: { 0, 1 ,2 }
이 예제에서 .. 연산자는 범위를 정의합니다. 시작 인덱스는 포함되고 종료 인덱스는 제외됩니다.
System.Index와 System.Range를 함께 사용하여 보다 동적인 작업을 수행할 수 있습니다.
int[] numbers = { 0 ,1 ,2 ,3 ,4 ,5 };
Range lastThree = ^3..^0;
int[] subset = numbers[lastThree]; // 출력: { 3 ,4 ,5 }
Substring 작업: 길이 계산 없이 문자열을 빠르게 슬라이스합니다.
string message = "Hello World!";
Console.WriteLine(message[^1]); // 출력: !
Console.WriteLine(message[^6..^0]); // 출력: World!
리스트 조작: 항목의 하위 집합을 쉽게 가져옵니다.
List<string> fruits = new List<string> { "Apple", "Banana", "Cherry", "Date" };
var lastTwo = fruits[^2..]; // 출력: {"Cherry", "Date"}
배열 조작: 추가 계산 없이 하위 배열 추출합니다.
int[] array = { 1 ,2 ,3 ,4 ,5 ,6 };
int[] firstHalf= array[..^3]; //출력:{ 1,2,3 }
기억해야 할 점
- 성능 : 배열 슬라이싱 시 새 배열이 할당되고 요소가 복사됩니다. 따라서 자주 슬라이싱 작업을 수행하는 경우 성능에 영향을 줄 수 있습니다.
- 인덱스 : 인덱스는 자기 자신을 포함하지 않습니다 ( 0부터 시작 )
결론
C#8에서 도입된 System.Index와 System.Range로 컬렉션 작업은 이전보다 간단해졌습니다. 이러한 기능은 코드의 장황함을 줄일뿐만 아니라 가독성도 향상시킵니다. 언제나 문법적인 단축 표현은 좋지만 해당 기능의 내부 메커니즘을 잘 이해하여 효과적으로 사용하는 것이 중요합니다."
'C#' 카테고리의 다른 글
IEnumerable 사용 팁 (0) | 2023.09.19 |
---|---|
Main 함수란?? (0) | 2023.09.15 |
자료구조 : 선형구조와 비선형구조 (2) | 2023.09.04 |
C# : File (1) | 2023.09.02 |
C# : Path (0) | 2023.09.01 |