Was ist der schnellste Weg, um die Werte und Schlüssel von einem Wörterbuch in eine anderen in C # kopieren?

StackOverflow https://stackoverflow.com/questions/81552

  •  09-06-2019
  •  | 
  •  

Frage

Es scheint nicht ein dictionary.AddRange () Methode. Kennt jemand einen besseren Weg, um die Elemente zu einem anderen Wörterbuch zu kopieren, ohne eine foreach-Schleife.

Ich bin mit dem System.Collections.Generic.Dictionary. Dies ist für .NET 2.0.

War es hilfreich?

Lösung

Es ist nichts falsch mit einer für / foreach-Schleife. Das ist alles eine hypothetische AddRange Methode ohnehin tun würde.

Die einzige zusätzliche Sorge, die ich haben möchte, ist mit der Zuteilung Verhalten Speicher, weil das Hinzufügen einer großen Anzahl von Einträgen mehrere Umschichtungen führen könnten und wieder Hashes. Es gibt keine Möglichkeit, die Kapazität eines bestehenden Wörterbuch um einen bestimmten Betrag zu erhöhen. Vielleicht haben Sie besser dran, ein neues Wörterbuch mit ausreichender Kapazität für beide Strom diejenigen, die Zuteilung, aber Sie müssen noch eine Schleife zumindest einen von ihnen zu laden.

Andere Tipps

Es ist der Dictionary Konstruktor, der eine andere Dictionary nimmt.

Du musst werfen es IDictionary, aber es gibt eine Add() Überlastung, die KeyValuePair<TKey, TValue> nimmt. Du bist immer noch foreach verwenden, though.

var Animal = new Dictionary<string, string>();

kann ein existierendes Tier Wörterbuch an den Konstruktor übergeben.

Dictionary<string, string> NewAnimals = new Dictionary<string, string>(Animal);

Für Spaß, habe ich diese Erweiterungsmethode Wörterbuch. Dies sollte eine tiefe Kopie tun, wo immer möglich.

public static Dictionary<TKey, TValue> DeepCopy<TKey,TValue>(this Dictionary&lt;TKey, TValue> dictionary)
        {
            Dictionary<TKey, TValue> d2 = new Dictionary<TKey, TValue>();

            bool keyIsCloneable = default(TKey) is ICloneable;
            bool valueIsCloneable = default(TValue) is ICloneable;

            foreach (KeyValuePair<TKey, TValue> kvp in dictionary)
            {
                TKey key = default(TKey);
                TValue value = default(TValue);
                if (keyIsCloneable)
                {
                    key = (TKey)((ICloneable)(kvp.Key)).Clone();
                }

                else
                {
                    key = kvp.Key;
                }

                if (valueIsCloneable)
                {
                    value = (TValue)((ICloneable)(kvp.Value)).Clone();
                }

                else
                {
                    value = kvp.Value;
                }

                d2.Add(key, value);
            }

            return d2;
        }

Wenn Sie mit zwei bestehenden Objekten zu tun haben, müssen Sie möglicherweise einige Kilometer mit der CopyTo-Methode erhalten: http://msdn.microsoft.com/en-us/library/cc645053.aspx

Verwenden Sie die Add-Methode der anderen Sammlung (Empfänger), um sie zu absorbieren.

Ich verstehe nicht, warum nicht das Wörterbuch (Dictionary) verwendet (wie von ageektrapped vorgeschlagen).

Haben Sie eine flache Kopie oder eine tiefe Kopie ausführen möchten? (Das heißt, beide Wörterbücher Hinweis auf die gleichen Referenzen oder neue Kopien von jedem Objekt in dem neuen Wörterbuch?)

Wenn Sie eine neue Wörterbuch zeigt auf neue Objekte erstellen, denke ich, dass der einzige Weg, durch a foreach .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top