2011-02-16 15 views
8

Saludos Guru, mi objetivo es crear un diccionario de listas, ¿existe una técnica más simple?Forma fácil de poblar un diccionario <cadena, Lista <string>>

Prefiero la Lista (t) a IEnumerable (t) por lo que elegí el Dictionary of Lists over Ilookup o IGrouping.

El código funciona pero parece una manera desordenada de hacer las cosas.

string[] files = Directory.GetFiles (@"C:\test"); 

Dictionary<string,List<string>> DataX = new Dictionary<string,List<string>>(); 

foreach (var group in files.GroupBy (file => Path.GetExtension (file))) 
{ 
    DataX.Add (group.Key, group.ToList()); 
} 
+0

No debería esto pregunta en http://codereview.stackexchange.com/? – servermanfail

+2

No veo nada malo con eso. ¿Por qué crees que es * desordenado *? –

+0

@Klaus: Pensé que él también estaba bastante mimado, pero la implementación de Linq se ve mucho más limpia. @Zion: Parece que tienes la mentalidad correcta para probar F #, se trata de estar limpio. – gjvdkamp

Respuesta

12

para hacerlo todo en LINQ puede utilizar ToDictionary():

string[] files = Directory.GetFiles (@"C:\test"); 
var DataX = files.GroupBy (file => Path.GetExtension (file)) 
       .ToDictionary(g => g.Key, g => g.ToList()); 

o como Klaus puntos por debajo de espera Puede hacerlo todo de una vez:

var DataX = Directory.GetFiles (@"C:\test") 
       .GroupBy (file => Path.GetExtension (file)) 
       .ToDictionary(g => g.Key, g => g.ToList()); 
+0

+1 se estaba preparando para publicar exactamente lo mismo. – diceguyd30

+0

+1, ¿por qué no eliminar la declaración de 'archivos' mientras está en ello? –

+0

@Klaus Cierto, gracias - editado. No soy muy fanático de comprimir demasiado todo, ya que hace que sea más difícil pasar y depurar (y también puede hacerlo menos legible), pero no veo ningún problema. haciendo eso aquí. – Rup

Cuestiones relacionadas