C# での配列スライス
C# は Perl とは異なり、@bar = @foo[0..40];
構文を直接使用して配列をスライスできます。ただし、同様の機能を実現する代替手段がいくつかあります。
配列セグメント
元の配列のコピーを回避する軽量のオプションについては、ArraySegment<T>
の使用を検討してください。これは、基礎となる要素をコピーせずに、配列の連続部分を表します:
<code class="language-csharp">byte[] foo = new byte[4096]; var segment = new ArraySegment<byte>(foo, 0, 41);</code>
segment
には、元の foo
配列の最初の 41 バイトが含まれるようになりました。 Array
属性と Offset
属性を介してその内容にアクセスすることも、LINQ 式で直接使用することもできます。
LINQ スキップしてテイク
LINQ を使用したい場合は、Skip
メソッドと Take
メソッドを使用してスライスを実装できます。
<code class="language-csharp">IEnumerable<byte> slice = foo.Skip(0).Take(41);</code>
slice
は、foo
配列の最初の 41 バイトを IEnumerable<byte>
シーケンスとして返します。
カスタマイズされた配列スライス関数
ArraySegment
も LINQ もニーズを満たさない場合は、インデックス範囲を使用してカスタムの配列スライス関数を作成できます。
<code class="language-csharp">byte[] Slice(byte[] array, int startIndex, int length) { byte[] slice = new byte[length]; Array.Copy(array, startIndex, slice, 0, length); return slice; } byte[] slice = Slice(foo, 0, 41);</code>
以上がC# で配列をスライスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。