ホームページ >バックエンド開発 >C++ >C# で配列要素の範囲を効率的に複製するにはどうすればよいですか?

C# で配列要素の範囲を効率的に複製するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-18 20:25:10482ブラウズ

How to Efficiently Clone a Range of Array Elements in C#?

C# 配列要素範囲の複製スキル

プログラム開発では、配列の一部の要素を操作する必要があることがよくあります。効率的な方法は、必要な要素のみを含む新しい配列を作成することです。 C# では、これは拡張メソッドを通じて実現できます。

部分配列を作成する拡張メソッド

指定した範囲の要素を含む部分配列を作成するには、次の拡張メソッドを定義できます:

<code class="language-csharp">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;
}</code>

このメソッドは、元の配列、含まれる最初の要素のインデックス、および新しい配列の長さを受け取ります。指定された要素のサブセットを含む新しい配列を返します。

使用例

次の例を考えてみましょう:

<code class="language-csharp">int[] data = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

// 创建一个包含索引3到索引7的元素的子数组
int[] subarray = data.SubArray(3, 5); // 注意长度为5,包含索引3,4,5,6,7

// 输出子数组
Console.WriteLine(string.Join(" ", subarray));</code>

出力:

<code>3 4 5 6 7</code>

ディープクローン

ディープ クローン (つまり、要素自体が参照ではなくクローンである新しい配列) が必要な場合は、シリアル化と逆シリアル化を含むより高度な手法を使用できます。ディープ クローン作成用の更新された拡張メソッドは次のとおりです:

<code class="language-csharp">public static T[] SubArrayDeepClone<T>(this T[] data, int index, int length)
{
    T[] arrCopy = new T[length];
    Array.Copy(data, index, arrCopy, 0, length);

    using (MemoryStream ms = new MemoryStream())
    {
        var bf = new BinaryFormatter();
        bf.Serialize(ms, arrCopy);
        ms.Position = 0;
        return (T[])bf.Deserialize(ms);
    }
}</code>

このメソッドは、まず新しい配列を作成し、元の配列から指定された範囲の要素をコピーしてから、シリアル化を使用してサブ配列内のオブジェクトのディープ クローンを作成します。元の配列内のオブジェクトはシリアル化可能である必要があることに注意してください。 BinaryFormatter は廃止されたものとしてマークされているため、System.Text.Json などのより新しいシリアル化メソッドを使用することをお勧めします。 この例は原理を理解するためだけのものであり、実際のアプリケーションではより安全なシリアル化方法に置き換える必要があります。

以上がC# で配列要素の範囲を効率的に複製するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。