C# 8 : 인덱싱과 슬라이싱
C# 8.0에서는 시퀀스(sequence) 인덱싱과 슬라이싱을 위해 System.Index 와 System.Range 라는 2개의 구조체를 새로 도입하였고,
시퀀스를 뒤에서부터 인덱싱할 수 있는 ^ prefix 연산자와
시퀀스의 부분 인덱스를 표시할 수 있는 .. 범위 연산자가 새롭게 도입하였다.
C# 8.0은 시퀀스의 앞 또는 뒤로부터의 인덱스를 사용할 수 있으며,
시퀀스로부터 일부 범위의 서브 시퀀스를 구하는 슬라이싱 기능을 제공한다.
(주: 배열은 연속적인 값들을 갖는 시퀀스 중의 하나이다)
C# 8 : System.Index 와 System.Range
C# 8.0에서 새로 도입된 System.Index 구조체는 시퀀스의 시작 또는 끝으로부터 인덱싱을 표현하는데 사용된다.
끝으로부터의 인덱싱을 위해서는 ^ 연산자를 사용하는데, 마지막 시퀀스 요소의 인덱스를 ^1 로 표시하고,
끝에서 2번째는 ^2, 끝에서 3번째는 ^3 과 같이 표시한다.
System.Range 구조체는 시작 인덱스(Start 속성)와 마지막 인덱스(End 속성)를 함께 가지며 범위를 표현할 때 사용한다. Range에서 특히 주의할 점은 마지막 End 인덱스는 실제 범위의 마지막 다음 요소라는 점이다. 즉, Range 가 1..4 이면 1부터 3까지만이 실제 범위가 된다.
System.Range 구조체는 시작 인덱스(Start 속성)와 마지막 인덱스(End 속성)를 함께 가지며 범위를 표현할 때 사용한다. Range에서 특히 주의할 점은 마지막 End 인덱스는 실제 범위의 마지막 다음 요소라는 점이다. 즉, Range 가 1..4 이면 1부터 3까지만이 실제 범위가 된다.
예제
string s = "Hello World";
// System.Index
Index idx = ^2;
ch = s[idx]; // l
// System.Range
Range r1 = 1..4;
string str1 = s[r1]; // ell
Index start = r1.Start;
bool b = start.IsFromEnd; // false
int v1 = start.Value; // 1
int v2 = r1.End.Value; // 4
// System.Index
Index idx = ^2;
ch = s[idx]; // l
// System.Range
Range r1 = 1..4;
string str1 = s[r1]; // ell
Index start = r1.Start;
bool b = start.IsFromEnd; // false
int v1 = start.Value; // 1
int v2 = r1.End.Value; // 4
C# 8 : 시퀀스 인덱싱과 슬라이싱
System.Index와 ^ 연산자에 기반하여 시퀀스 인덱싱을 사용할 수 있고,
System.Range와 .. 범위 연산자를 이용하여 시퀀스를 슬라이스(slice)하는 기능을 사용할 수 있다.
아래 예제는 문자열 시퀀스를 인덱싱하고 슬라이싱하는 여러 방법들을 예시한 것이다.
예제
string s = "Hello World";
// 인덱싱
char ch1 = s[0]; // H
char ch1 = s[1]; // e
char ch2 = s[^1]; // d
char ch2 = s[^2]; // l
// 슬라이싱
var s1 = s[1..4]; // ell
var s2 = s[^5..^2]; // Wor
var s3 = s[..]; // Hello World
var s4 = s[..3]; // Hel
var s5 = s[3..]; // lo World
Range rng = 1..^0;
var s6 = s[rng]; // ello World
// 인덱싱
char ch1 = s[0]; // H
char ch1 = s[1]; // e
char ch2 = s[^1]; // d
char ch2 = s[^2]; // l
// 슬라이싱
var s1 = s[1..4]; // ell
var s2 = s[^5..^2]; // Wor
var s3 = s[..]; // Hello World
var s4 = s[..3]; // Hel
var s5 = s[3..]; // lo World
Range rng = 1..^0;
var s6 = s[rng]; // ello World
C# 동영상 강의 : C# 8.0 새기능 Index와 Range [레벨] 고급 [C# Advanced] C# 8.0에서 새로 도입된 인덱싱과 슬라이싱 기능을 설명합니다. 이러한 새로운 기능을 위해 System.Index, System.Range 타입을 추가하였으며, ^ 연산자, .. 연산자가 추가되었습니다. |