ホームページ > バックエンド開発 > C++ > .NET で汎用辞書のディープ コピーを作成するにはどうすればよいですか?

.NET で汎用辞書のディープ コピーを作成するにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-04 15:16:39
オリジナル
334 人が閲覧しました

How to Create Deep Copies of Generic Dictionaries in .NET?

.NET での汎用辞書のディープ コピーの作成

汎用辞書の複製またはディープ コピーの実行 () は、元のデータ構造を影響を与えずに保持するために不可欠です。 オリジナル。以下にいくつかのアプローチを示します。

浅いクローニングを使用した ToDictionary() メソッド:

キーと値の参照がコピーされる浅いコピーのみが必要な場合は、< cref="System.Linq.Enumerable.ToDictionary{TSource, TKey, TElement}(IEnumerable{TSource}, Func{TSource, TKey}, Func{TSource, TElement})"/>という方法が使えます。次の例は、浅いコピーを示しています:

var originalDict = new Dictionary<string, int> { { "Key1", 1 }, { "Key2", 2 } };
var shallowCopyDict = originalDict.ToDictionary(entry => entry.Key, entry => entry.Value);</p>
<p><strong>ToDictionary() ディープ クローニングを使用したメソッド:</strong></p>
<p>ネストされたオブジェクトも再帰的にコピーされる深いコピーが必要な場合、<cref="System.ICloneable"/> を参照してください。値型のクローン作成を実装するインターフェイス。次の例は、クローン作成を使用したディープ コピーを示しています:</p>
<pre class="brush:php;toolbar:false">class CloneableValue : ICloneable
{
    public int Value { get; set; }

    public object Clone()
    {
        return new CloneableValue { Value = this.Value };
    }
}

Dictionary<string, CloneableValue> originalDict = new Dictionary<string, CloneableValue> { { "Key1", new CloneableValue() { Value = 1 } } };
var deepCopyDict = originalDict.ToDictionary(entry => entry.Key, entry => (CloneableValue)entry.Value.Clone());
ログイン後にコピー

カスタム クローン作成メソッド:

または、データ構造に固有のカスタム クローン作成メソッドを作成できます。このメソッドはディクショナリを反復処理し、キー オブジェクトと値オブジェクトの新しいインスタンスを作成し、それに応じて値を割り当てます。以下に例を示します。

public static Dictionary<string, T> CloneDictionary<T>(Dictionary<string, T> originalDict)
{
    Dictionary<string, T> cloneDict = new Dictionary<string, T>();
    foreach (KeyValuePair<string, T> entry in originalDict)
    {
        cloneDict.Add(entry.Key, (T)entry.Value);
    }
    return cloneDict;
}
ログイン後にコピー

アプローチの選択は、必要なクローン作成の深さとアプリケーションの特定の要件によって異なります。 適切なキーと要素セレクターを備えたメソッドは、浅いコピーと深いコピーの両方を作成する多用途の方法を提供します。

以上が.NET で汎用辞書のディープ コピーを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート