2017-09-24 1 views
0

정수 배열이 있는데, 여기서 인덱스 10부터 시작하는 배열에 관심이 있습니다. 따라서 11 번째 이후 요소로 구성된 새로운 배열을 반환하는 메서드를 작성하고 있습니다. Array.Copy를 시도했지만 필요한 옵션이 없습니다. 무엇이 최선의 방법이 될까요?효율적으로 배열의 일부를 반환하는 방법 (색인에서)?

+0

배열이'입니다 복사에 대한 추가 메모리를 할당합니다 : 경우 당신은 정말 당신이 LINQ로 새로운 배열을 만들 수 있습니다 반환 형식으로 배열 필요 IEnumerable' 그래서'Skip()'과'Take()'를 사용하십시오. – Crowcoder

답변

1

당신이 경량 구조체 인 ArraySegment

var source = new int[20]; 
var segment = new ArraySegment<int>(source, 10, source.Length - 10); 

을 사용할 수 있습니다 당신이 그것을에 LINQ를 사용할 수 있도록 그것은 IEnumerable<T> 인터페이스를 구현합니다.

편집 :

source.Skip(9).ToArray(); // skip from 0 to 9 and use a rest of source array 

그러나이 배열

0
public static T[] SubArray<T>(this T[] data, int index, int length) 
{ 
    T[] result = new T[length]; 
    Array.Copy(data, index, result, 0, length); 
    return result; 
}  

int startIndex=10; 
    int[] data = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }; 
    int[] sub = data.SubArray(startIndex, (data.Length-startIndex)-1)); 
+0

그런 방법은 없습니다 : SubArray. – Dmitry

+0

감사 드미트리, 지정된 방법의 코드가 게시 된 솔루션에 업데이트되었습니다. –

관련 문제