Maison >développement back-end >C++ >Comment créer des copies complètes de dictionnaires génériques dans .NET ?

Comment créer des copies complètes de dictionnaires génériques dans .NET ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-04 15:16:39349parcourir

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

Création de copies complètes de dictionnaires génériques dans .NET

Clonage ou réalisation de copies complètes de dictionnaires génériques () est essentiel pour préserver la structure des données d'origine sans affecter l'original. Voici quelques approches :

Méthode ToDictionary() avec clonage superficiel :

Si vous n'avez besoin que d'une copie superficielle où les références de clé et de valeur sont copiées, le < voir cref="System.Linq.Enumerable.ToDictionary{TSource, TKey, TElement}(IEnumerable{TSource}, Func{TSource, TKey}, Func{TSource, TElement})"/> méthode peut être utilisée. L'exemple suivant montre une copie superficielle :

var originalDict = new Dictionary<string, int> { { "Key1", 1 }, { "Key2", 2 } };
var shallowCopyDict = originalDict.ToDictionary(entry => entry.Key, entry => entry.Value);

Méthode ToDictionary() avec clonage profond :

Si vous avez besoin d'une copie profonde dans laquelle les objets imbriqués sont également copiés de manière récursive , vous pouvez utiliser le interface pour implémenter le clonage sur le type valeur. L'exemple suivant montre une copie complète utilisant le clonage :

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());

Méthode de clonage personnalisée :

Vous pouvez également créer une méthode de clonage personnalisée spécifique à votre structure de données. Cette méthode parcourrait le dictionnaire, créerait de nouvelles instances des objets clé et valeur et attribuerait les valeurs en conséquence. Voici un exemple :

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;
}

Le choix de l'approche dépend de la profondeur de clonage requise et des exigences spécifiques de votre application. Le La méthode avec des sélecteurs de clés et d'éléments appropriés offre un moyen polyvalent de créer des copies superficielles et profondes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn