C#의 배열 슬라이싱

Muhammad Maisam Abbas 2024년2월16일
  1. C#에서 Linq 메서드를 사용하여 배열 슬라이스
  2. C#에서ArraySegment클래스를 사용하여 배열 슬라이스
  3. C#에서 확장 함수를 사용하여 배열 슬라이스
C#의 배열 슬라이싱

이 자습서에서는 C#에서 배열을 분할하는 방법을 소개합니다.

C#에서 Linq 메서드를 사용하여 배열 슬라이스

어레이를 더 작은 하위 어레이로 분할하는 프로세스를 어레이 분할이라고합니다. Linq는 쿼리 기능을 C#의 데이터 구조와 통합하는 데 사용됩니다. Linq의 Take(x)함수는 데이터 구조의 시작 부분에서 요소의x수를 복사합니다. 다음 코드 예제는 C#에서 Linq를 사용하여 배열을 분할하는 방법을 보여줍니다.

using System;
using System.Linq;

namespace array_slicing {
  class Program {
    static void Main(string[] args) {
      string[] foo = { "one", "two", "three", "four", "five" };

      string[] bar = foo.Take(2).ToArray();
      foreach (var e in bar) {
        Console.WriteLine(e);
      }
    }
  }
}

출력:

one
two

문자열 배열foo를 초기화하고foo배열의 처음 두 요소를 포함하는 다른 문자열 배열 인bar로 슬라이스했습니다. 이 방법은 배열의 시작 요소 만이 방법으로 슬라이스 할 수 있기 때문에 매우 제한적입니다.

C#에서ArraySegment클래스를 사용하여 배열 슬라이스

ArraySegment클래스는 배열을 C#에서 하위 배열로 분할하는 데 사용됩니다. ArraySegment클래스의 생성자는 분할 할 배열, 시작 인덱스 및 분할 할 요소 수를 가져 와서 하위 배열을 제공합니다. 다음 코드 예제는 C#에서ArraySegment클래스를 사용하여 배열을 분할하는 방법을 보여줍니다.

using System;
using System.Linq;

namespace array_slicing {
  class Program {
    static void Main(string[] args) {
      string[] a = { "one", "two", "three", "four", "five" };
      var segment = new ArraySegment<string>(a, 2, 3);
      foreach (var s in segment) {
        Console.WriteLine(s);
      }
    }
  }
}

출력:

three
four
five

문자열 배열a를 초기화하고ArraySegment클래스의 생성자를 사용하여a배열의 인덱스 2에서 시작하는 3 개의 요소를 포함하는 하위 배열segment로 슬라이스했습니다. 이 접근 방식으로 중간에서 배열을 분할 할 수 있기 때문에 더 나은 접근 방식입니다.

C#에서 확장 함수를 사용하여 배열 슬라이스

확장 메서드를 사용하면 사용자 지정 데이터 유형을 선언하지 않고도 기존 데이터 유형에 함수를 추가 할 수 있습니다. 또한 C#에서 배열을 분할하기위한 기본 제공 메서드 대신 사용자 정의 확장 메서드를 정의 할 수도 있습니다. 이 확장 메서드는 슬라이스의 시작 및 끝 인덱스를 가져와이 범위 내의 하위 배열을 반환 할 수 있습니다. 다음 코드 예제는 C#에서 배열을 분할하는 확장 함수를 정의하는 방법을 보여줍니다.

using System;
using System.Collections.Generic;

namespace iterate_through_a_list {
  public static class Extensions {
    public static T[] Slice<T>(this T[] source, int start, int end) {
      if (end < 0) {
        end = source.Length + end;
      }
      int len = end - start;

      T[] res = new T[len];
      for (int i = 0; i < len; i++) {
        res[i] = source[i + start];
      }
      return res;
    }
  }
  class Program {
    static void Main(string[] args) {
      string[] values = { "one", "two", "three", "four", "five" };
      string[] slice = values.Slice(2, 4);
      foreach (var s in slice) {
        Console.WriteLine(s);
      }
    }
  }
}

출력:

three
four
five

슬라이스의 시작 및 끝 인덱스를 가져와 슬라이스 된 하위 배열을 반환하는 확장 메서드Slice()를 만들었습니다. 문자열 배열values를 초기화하고values배열의 인덱스2에서 인덱스4까지의 값을 포함하는slice배열로 슬라이스했습니다.

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn

관련 문장 - Csharp Array