2009-09-23 19 views
12

Tengo una variable del tipo Dictionary<MyType, List<MyOtherType>>
Quiero convertirlo a Lookup<MyType, MyOtehrType>.LINQ Convert Dictionary to Lookup

Quería usar las funciones de Lambda para primero, aplanar el diccionario y luego convertir esto a Búsqueda usando el ToLookup(). Me quedé atrapado con el diccionario. Pensé en usar SelectMany pero no puedo hacerlo funcionar. Alguien tiene una idea de cómo hacerlo?

Respuesta

12

¿Qué tal:

var lookup = dictionary.SelectMany(pair => pair.Value, 
            (pair, Value) => new { pair.Key, Value }) 
         .ToLookup(pair => pair.Key, pair => pair.Value); 

Se siente como un poco de un desperdicio hacer esto cuando el diccionario ya tiene toda la información agrupada adecuada, pero no puedo ver una manera simple ronda de eso. Por supuesto que podría implementar ILookup<TKey, TValue> sí mismo con una envoltura alrededor del diccionario ...

+0

Gracias Jon! ¡Exactamente lo que buscaba! –

14

Igual que el método de Jon, pero evitando la creación de un tipo anónimo:

var lookup = dictionary 
      .SelectMany(p => p.Value, Tuple.Create) 
      .ToLookup(p => p.Item1.Key, p => p.Item2); 
+1

¡Gracias señor! ESTO es como se supone que C# se parece :) –