코샵
끄적끄적 코딩 공방
코샵

인기 글

  • 분류 전체보기 (475) N
    • MongoDB (4)
    • 일기장 (4)
    • Unity (138)
      • Tip (41)
      • Project (1)
      • Design Pattern (8)
      • Firebase (6)
      • Asset (2)
    • 파이썬 (127)
      • Basic (40)
      • OpenCV (8)
      • Pandas (15)
      • PyQT (3)
      • SBC(Single Board Computer) (1)
      • 크롤링 (14)
      • Fast API (29)
      • Package (6)
    • Linux (4)
    • C# (97)
      • Algorithm (11)
      • Window (7)
    • TypeScript (44) N
      • CSS (6) N
    • Git (11)
    • SQL (5)
    • Flutter (10)
      • Tip (1)
    • System (1)
    • BaekJoon (6)
    • Portfolio (2)
    • MacOS (1)
    • 유틸리티 (1)
    • 서비스 (6)
    • 자동화 (3)
    • Hobby (10)
      • 물생활 (10)
      • 식집사 (0)
전체 방문자
오늘
어제

최근 댓글

최근 글

반응형
hELLO · Designed By 정상우.
코샵

끄적끄적 코딩 공방

C#

C# 8의 System.Index 및 System.Range

2023. 9. 12. 11:55
반응형

C# 8은 여러 가지 새로운 기능을 가져왔는데, 그 중 하나는 컬렉션의 인덱싱과 슬라이싱을 위한 새로운 System.Index 및 System.Range 타입입니다. 이 글에서는 이러한 추가 기능에 대해 자세히 알아보고, 더 간결하고 표현력 있는 코드를 작성하는 방법을 소개하겠습니다.

 

System.Index 

C# 8 이전에는 배열이나 리스트에서 끝에서부터 요소에 접근하려면 일부 계산을 수행해야 했습니다. System.Index를 사용하면 이 과정이 더 직관적으로 됩니다.

code int[] numbers = { 0, 1, 2, 3, 4, 5 }; 
Index lastElement = ^1; // 마지막 요소를 나타냅니다. 
Console.WriteLine(numbers[lastElement]); // 출력: 5

^ 연산자는 끝에서부터 세기 위해 사용됩니다. 따라서 ^1은 마지막 요소를 의미하며, ^2는 끝에서 두 번째 요소를 의미합니다.

 

System.Range 

System.Index가 단일 요소에 쉽게 접근할 수 있게 해주었다면, System.Range는 일련의 요소를 선택할 수 있도록 해주어 슬라이싱을 간단하게 만들어줍니다.

code int[] numbers = { 0, 1, 2, 3, 4, 5 }; 
Range firstThree = 0..3; // 인덱스가 0부터 2까지인 요소들을 선택합니다. 
int[] subset = numbers[firstThree]; // 출력: { 0, 1 ,2 }

이 예제에서 .. 연산자는 범위를 정의합니다. 시작 인덱스는 포함되고 종료 인덱스는 제외됩니다.

 

System.Index와 System.Range를 함께 사용하여 보다 동적인 작업을 수행할 수 있습니다.

int[] numbers = { 0 ,1 ,2 ,3 ,4 ,5 };
Range lastThree = ^3..^0;
int[] subset = numbers[lastThree]; // 출력: { 3 ,4 ,5 }

 

Substring 작업: 길이 계산 없이 문자열을 빠르게 슬라이스합니다.

string message = "Hello World!";
Console.WriteLine(message[^1]); // 출력: !
Console.WriteLine(message[^6..^0]); // 출력: World!

 

리스트 조작: 항목의 하위 집합을 쉽게 가져옵니다. 

List<string> fruits = new List<string> { "Apple", "Banana", "Cherry", "Date" };
var lastTwo = fruits[^2..]; // 출력: {"Cherry", "Date"}

 

배열 조작: 추가 계산 없이 하위 배열 추출합니다.

int[] array = { 1 ,2 ,3 ,4 ,5 ,6 };
int[] firstHalf= array[..^3]; //출력:{ 1,2,3 }

 

기억해야 할 점 

  • 성능 : 배열 슬라이싱 시 새 배열이 할당되고 요소가 복사됩니다. 따라서 자주 슬라이싱 작업을 수행하는 경우 성능에 영향을 줄 수 있습니다.
  • 인덱스 : 인덱스는 자기 자신을 포함하지 않습니다 ( 0부터 시작 ) 

 

결론

C#8에서 도입된 System.Index와 System.Range로 컬렉션 작업은 이전보다 간단해졌습니다. 이러한 기능은 코드의 장황함을 줄일뿐만 아니라 가독성도 향상시킵니다. 언제나 문법적인 단축 표현은 좋지만 해당 기능의 내부 메커니즘을 잘 이해하여 효과적으로 사용하는 것이 중요합니다."

저작자표시 비영리 변경금지 (새창열림)

'C#' 카테고리의 다른 글

IEnumerable 사용 팁  (0) 2023.09.19
Main 함수란??  (0) 2023.09.15
자료구조 : 선형구조와 비선형구조  (2) 2023.09.04
C# : File  (1) 2023.09.02
C# : Path  (0) 2023.09.01
    'C#' 카테고리의 다른 글
    • IEnumerable 사용 팁
    • Main 함수란??
    • 자료구조 : 선형구조와 비선형구조
    • C# : File
    코샵
    코샵
    나의 코딩 일기장

    티스토리툴바