Bir sözlüğün değerler listesini bir diziye dönüştürmenin en etkili yolu nedir?
Bir varsa Örneğin, Dictionary
nerede Key
olduğunu String
ve Value
olup Foo
, Almak istediğimFoo[]
VS 2005, C # 2.0 kullanıyorum
Yanıtlar:
// 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;
Değerler üzerinde ToArray () işlevi vardır:
Foo[] arr = new Foo[dict.Count];
dict.Values.CopyTo(arr, 0);
Ama verimli olduğunu düşünmüyorum (gerçekten denemedim, ama sanırım tüm bu değerleri diziye kopyalıyor). Gerçekten bir Diziye ihtiyacınız var mı? Değilse, IEnumerable'ı geçmeye çalışırdım:
IEnumerable<Foo> foos = dict.Values;
Linq'i kullanmak istiyorsanız, aşağıdakileri deneyebilirsiniz:
Dictionary<string, object> dict = new Dictionary<string, object>();
var arr = dict.Select(z => z.Value).ToArray();
Hangisinin daha hızlı veya daha iyi olduğunu bilmiyorum. İkisi de benim için çalışıyor.
dict.Values.ToArray()
aynı şeyi yapar, ancak her bir değeri bir temsilci aracılığıyla gerçekleştirme yükü olmadan.
Bu günlerde, LINQ'ya sahip olduğunuzda, sözlük anahtarlarını ve değerlerini tek bir dizeye dönüştürebilirsiniz.
Aşağıdaki kodu kullanabilirsiniz:
// 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);