Was ist die effizienteste Methode, um die Werteliste eines Wörterbuchs in ein Array umzuwandeln?
Wenn ich zum Beispiel ein Dictionary
Wo Key
ist String
und Value
ist Foo
, möchte ich bekommenFoo[]
Ich verwende VS 2005, C # 2.0
Antworten:
// dict is Dictionary<string, Foo>
Foo[] foos = new Foo[dict.Count];
dict.Values.CopyTo(foos, 0);
// or in C# 3.0:
var foos = dict.Values.ToArray();
using System.Linq;
Es gibt eine ToArray () - Funktion für Werte:
Foo[] arr = new Foo[dict.Count];
dict.Values.CopyTo(arr, 0);
Aber ich denke nicht, dass es effizient ist (ich habe es nicht wirklich versucht, aber ich denke, es kopiert alle diese Werte in das Array). Benötigen Sie wirklich ein Array? Wenn nicht, würde ich versuchen, IEnumerable zu übergeben:
IEnumerable<Foo> foos = dict.Values;
Wenn Sie linq verwenden möchten, können Sie Folgendes versuchen:
Dictionary<string, object> dict = new Dictionary<string, object>();
var arr = dict.Select(z => z.Value).ToArray();
Ich weiß nicht, welches schneller oder besser ist. Beide arbeiten für mich.
dict.Values.ToArray()
macht das Gleiche, aber ohne den Aufwand, jeden Wert durch einen Delegaten zu materialisieren.
Heutzutage können Sie, sobald Sie LINQ verfügbar haben, die Wörterbuchschlüssel und ihre Werte in eine einzelne Zeichenfolge konvertieren.
Sie können den folgenden Code verwenden:
// convert the dictionary to an array of strings
string[] strArray = dict.Select(x => ("Key: " + x.Key + ", Value: " + x.Value)).ToArray();
// convert a string array to a single string
string result = String.Join(", ", strArray);