Favicon

Index, range operators

Peponi11/21/20243m

C#
SyntaxOperator^..

1. Introduction

인덱스 (^), 범위 (..) 연산자는 Count, Length와 같은 int getter 프로퍼티를 가진 형식에 사용할 수 있다. 컬렉션 식 또한 여기에 포함된다.

  1. ^ 연산자는 요소 위치를 거꾸로 표현한다.
    • ^n으로 위치를 지정한다.
    • n의 자리에 시퀀스 길이를 넣는 경우 첫번째 요소, ^1은 마지막 요소이다.
  2. .. 연산자는 요소의 범위를 나타낸다.
    • 표현식은 a..b이며 [a, b)를 의미한다.
    • ^ 연산자와 같이 사용할 수 있다.

아래는 ^, .. 연산자의 사용법을 보여준다.

2. Example

^ 연산자
string foo = "Hello, World!";
 
Console.WriteLine(foo[^2]);     // d
 
int[] bar = [1, 2, 3, 4, 5];
 
Console.WriteLine(bar[^2]);     // 4
 
List<int> baz = [1, 2, 3, 4];
 
Console.WriteLine(baz[^2]);     // 3
.. 연산자
List<int> foo = [1, 2, 3, 4, 5, 6, 7];
 
// a.. : a부터 끝까지
var segment = foo[2..];
Write(segment);
 
// ..b : 처음부터 b-1까지
segment = foo[..5];
Write(segment);
 
// a..b : a부터 b-1까지
segment = foo[2..5];
Write(segment);
 
void Write(List<int> segment)
{
    segment.ForEach(x => Console.Write($"{x} "));
    Console.WriteLine();
}
 
/* output:
3 4 5 6 7
1 2 3 4 5
3 4 5
*/
.., ^ 연산자
List<int> foo = [1, 2, 3, 4, 5, 6, 7];
 
// ^n.. : 뒤에서 n부터
var segment = foo[^5..];
Write(segment);
 
// ..^n : 처음부터 뒤에서 n+1까지
segment = foo[..^2];
Write(segment);
 
// ^n..^n : 뒤에서 n부터 뒤에서 n+1까지
segment = foo[^5..^2];
Write(segment);
 
void Write(List<int> segment)
{
    segment.ForEach(x => Console.Write($"{x} "));
    Console.WriteLine();
}
 
/* output:
3 4 5 6 7
1 2 3 4 5
3 4 5
*/

3. 컬렉션 범위

연산자 설정에 따른 컬렉션 범위는 아래와 같다.

범위
..[0, ^0)
..b[0, b)
a..[a, ^0)
a..b[a, b)
^a..[^a, ^0)
..^b[0, ^b)
a..^b[a, ^b)
^a..^b[^a, ^b)

4. 참조 자료