Index, range operators
Peponi │ 11/21/2024 │ 3m
C#
SyntaxOperator^..
Index, range operators
11/21/2024
3m
Peponi
C#
SyntaxOperator^..
1. Introduction
인덱스 (^), 범위 (..) 연산자는 Count, Length와 같은 int getter 프로퍼티를 가진 형식에 사용할 수 있다. 컬렉션 식 또한 여기에 포함된다.
^연산자는 요소 위치를 거꾸로 표현한다.^n으로 위치를 지정한다.n의 자리에 시퀀스 길이를 넣는 경우 첫번째 요소,^1은 마지막 요소이다.
..연산자는 요소의 범위를 나타낸다.- 표현식은
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]); // 3List<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) |