C# 8의 System.Index 및 System.Range

2023. 9. 12. 11:55·C#
반응형

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  (1) 2023.09.01
'C#' 카테고리의 다른 글
  • IEnumerable 사용 팁
  • Main 함수란??
  • 자료구조 : 선형구조와 비선형구조
  • C# : File
코샵
코샵
나의 코딩 일기장
    반응형
  • 코샵
    끄적끄적 코딩 공방
    코샵
    • 분류 전체보기 (725)
      • 스마트팜 (0)
      • 상품 추천 (223)
      • MongoDB (4)
      • 하드웨어 (17)
      • 일기장 (4)
      • 파이썬 (130)
        • Basic (41)
        • OpenCV (8)
        • Pandas (15)
        • PyQT (3)
        • SBC(Single Board Computer) (1)
        • 크롤링 (14)
        • Fast API (29)
        • Package (6)
      • Unity (138)
        • Tip (41)
        • Project (1)
        • Design Pattern (8)
        • Firebase (6)
        • Asset (2)
      • Linux (4)
      • C# (97)
        • Algorithm (11)
        • Window (7)
      • TypeScript (51)
        • CSS (10)
      • Git (11)
      • SQL (5)
      • Flutter (10)
        • Tip (1)
      • System (1)
      • BaekJoon (6)
      • Portfolio (2)
      • MacOS (1)
      • 유틸리티 (1)
      • 서비스 (6)
      • 자동화 (3)
      • Hobby (10)
        • 물생활 (10)
        • 식집사 (0)
  • 인기 글

  • 태그

    C#
    리뷰관리
    codingcommunity
    유니티
    카페24리뷰
    상품 리뷰 크롤링
    ipcamera
    리스트
    appdevelopment
    파이썬
    스크립트 실행
    codingtips
    라떼우유
    셀레니움
    list
    카페24리뷰이관
    programmerlife
    긴유통기한우유
    rtsp
    리뷰이관
    스크립트 실행 순서
    스마트스토어리뷰
    unity
    Python
    쇼핑몰리뷰
    programming101
    devlife
    learntocode
    cv2
    믈레코비타멸균우유
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코샵
C# 8의 System.Index 및 System.Range
상단으로

티스토리툴바