質問

私は文字列の配列を構築します

string[] parts = string.spilt(" ");

そして、Xの部分を含む配列を取得します。要素で始まる文字列の配列のコピーを取得したいと思います

parts[x-2]

明らかな強引なアプローチ (新しい配列を作成して文字列を挿入する) 以外に、C# でこれを行うよりエレガントな方法はありますか?

役に立ちましたか?

解決

Array.Copyはどうでしょうか?

http://msdn.microsoft.com/en-us/library/aa310864(VS.71).aspx

Array.Copy メソッド (Array、Int32、Array、Int32、Int32)

指定されたソース インデックスから始まる配列から要素の範囲をコピーし、指定された宛先インデックスから始まる別の配列に貼り付けます。長さとインデックスは 32 ビット整数として指定されます。

他のヒント

この質問に答えたことを思い出し、必要なことを実行するための高パフォーマンスな方法を提供する可能性のある新しいオブジェクトについて知りました。

を見てみましょう ArraySegment<T>. 。のようなことができるようになります。

string[] parts = myString.spilt(" ");
int idx = parts.Length - 2;
var stringView = new ArraySegment<string>(parts, idx, parts.Length - idx);
List<string> parts = new List<string>(s.Split(" "));
parts.RemoveRange(0, x - 2);

仮定して List<string>(string[]) コピー操作を実行する代わりに、既存の配列をバッキング ストアとして使用するように最適化されており、配列のコピーを実行するよりも高速になる可能性があります。

使用 配列.コピー. 。必要なことを行うオーバーロードがあります。

Array.Copy(配列、int32、配列、 Int32、Int32)
指定されたソースから始まる配列から要素の範囲をコピーします インデックスを作成し、それらを別の配列に貼り付けます 指定した目的地から開始 インデックス。

Array.Copy メソッド

次のようなものだと思います:

string[] less = new string[parts.Length - (x - 2)];
Array.Copy(parts, x - 2, less, 0, less.Length);

(ない バグが 1 つありますが、そこに間違いはありません。)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top