2008-10-13 23 views
63

¿Cuál es la forma más eficaz de convertir la lista de valores de un diccionario en una matriz?Convertir valores de diccionario en matriz

Por ejemplo, si tengo una Dictionary donde Key es String y Value es Foo, quiero conseguir Foo[]

estoy utilizando VS 2005, C# 2,0

Respuesta

97
// 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(); 
+0

¿La extensión .ToArray () funciona mejor? – Goran

+0

, pero ¿cómo sabemos que es el más eficiente? –

+0

No puedo ver cómo ToArray() podría ser más rápido que la copia directa, que parece ser minimalista. –

4

Hay una ToArray () Funciona en Valores:

Foo[] arr = new Foo[dict.Count];  
dict.Values.CopyTo(arr, 0); 

Pero no creo que sea effici ent (Realmente no lo he intentado, pero supongo que copia todos estos valores en la matriz). ¿Realmente necesitas una matriz? De lo contrario, trataría de pasar IEnumerable:

IEnumerable<Foo> foos = dict.Values; 
11

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

Si desea utilizar LINQ, para que pueda seguir los siguientes pasos:

Dictionary<string, object> dict = new Dictionary<string, object>(); 
var arr = dict.Select(z => z.Value).ToArray(); 

no sé cuál es mejor o más rápido. Ambos funcionan para mí.

+2

'dict.Values.ToArray()' hace lo mismo, pero sin la sobrecarga de materializar cada valor a través de un delegado. – BACON

Cuestiones relacionadas