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]); // 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) |