2017-09-24 5 views
0

intの配列があり、インデックス10から始まる配列に興味があります。したがって、11番目以降の要素からなる新しい配列を返すメソッドを作成しています。 Array.Copyを試しましたが、必要なオプションがありません。これにはどのような方法が最適でしょうか?効率的な配列の一部を返す方法(インデックスから)?

+0

アレイは 'ですIEnumerable'は 'Skip()'と 'Take()'を使います。 – Crowcoder

答えて

1

あなたは、これは、軽量構造体であり、あなたがそれにLINQを使用することができますので、それはIEnumerable<T>インタフェースを実装ArraySegment

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

を使用することができます。

EDIT:場合は、あなたが本当にあなたがLINQを使用して新しい配列を作成することができ、戻り値の型として配列を必要とする:

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

ありがとうDmitry、指定されたメソッドのコードが更新されました。 –

関連する問題