언어/C#

[C#] 인덱스 범위 표현식(Range expression)

Nakuri 2023. 3. 28. 10:48
728x90

개요

동아리 프로젝트 작업하다가 새로운 연산자를 알게되었다.

arr[^1];
arr[0..^2];
arr[..]

위과 같은 연산자들이다.

본문

찾아보니 인덱스 범위 표현식(Range expression)이라고 부르는 듯하다.(C# 8.0)
크게 ^ 연산자와 .. 연산자가 있다.

^ 연산자

int[] arr = { 0, 1, 2, 3, 4 };
int n = arr[^1]; // n == 4
// arr[^1] == arr[arr.count-1]

^ 연산자는 위와 같이 count-n과 같은 역할을 수행한다.
arr[^1]로 마지막 값에 접근 할 수 있다.
arr[^0]은 마지막 값의 다음 위치를 가르키니 주의 해야한다.(arr[^0] == arr.count)

.. 연산자

int[] arr = { 0, 1, 2, 3, 4 };
arr[3..]; // { 3, 4 }
arr[2..^1]; // { 2, 3 }
arr[..]; // { 0, 1, 2, 3, 4 }
arr[..^0]; // { 0, 1, 2, 3, 4 }

위와 같이 슬라이싱에 활용할 수 있다.
arr[시작 값 인덱스..끝값 다음 인덱스]와 같은 형태로 사용한다.
따라서 전체 값을 슬라이싱 하려면 [0..^0], [..], [0..] 등과 같은 형태로 나타낼 수 있다.
 

결론

두 연산자를 적재적소에 활용하면 코드가 훨씬 간결해질 수 있을 것 같다.
RIder를 사용하면서 배우는 점이 많은 것 같다. 끗
 

참조

https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-8.0/ranges
https://www.csharpstudy.com/latest/CS8-indexing-slicing.aspx

'언어 > C#' 카테고리의 다른 글

[C#] invalidoperationexception 에러  (0) 2023.01.19
[C#] 맨날 까먹는 예약어 및 키워드 정리  (0) 2022.12.12