¿Cuál es la forma más eficiente de convertir la lista de valores de un diccionario en una matriz?
Por ejemplo, si tengo un Dictionary
dónde Key
está String
y Value
es Foo
, quiero obtenerFoo[]
Estoy usando VS 2005, C # 2.0
// 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;
Guárdelo en una lista. Es más fácil;
List<Foo> arr = new List<Foo>(dict.Values);
Por supuesto, si lo desea específicamente en una matriz;
Foo[] arr = (new List<Foo>(dict.Values)).ToArray();
fuente
Hay una función ToArray () en Valores:
Foo[] arr = new Foo[dict.Count]; dict.Values.CopyTo(arr, 0);
Pero no creo que sea eficiente (realmente no lo he intentado, pero supongo que copia todos estos valores en la matriz). ¿Realmente necesitas una matriz? Si no, intentaría pasar IEnumerable:
fuente
Si desea utilizar linq, puede intentar lo siguiente:
Dictionary<string, object> dict = new Dictionary<string, object>(); var arr = dict.Select(z => z.Value).ToArray();
No sé cuál es más rápido o mejor. Ambos funcionan para mí.
fuente
dict.Values.ToArray()
hace lo mismo, pero sin la sobrecarga de materializar cada valor a través de un delegado.En estos días, una vez que tenga LINQ disponible, puede convertir las claves del diccionario y sus valores en una sola cadena.
Puede utilizar el siguiente código:
// 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);
fuente