valor recorrer obtener leer ejemplos diccionario consultar como buscar c# .net-3.5 dictionary ilist

recorrer - obtener valor de un diccionario c#



¿Cómo obtengo todos los valores de un Diccionario<TKey, TValue> como IList<TValue>? (4)

Debido a la forma en que se mantiene un diccionario (o tabla hash), esto es lo que haría. Internamente, la implementación contiene claves, cubos (para el manejo de colisiones) y valores. Es posible que pueda recuperar la lista de valores internos, pero es mejor con algo como esto:

IDictionary<int, IList<MyClass>> dict; var flattenList = dict.SelectMany( x => x.Value );

Debería ser el truco;) SelectMany aplana el resultado, lo que significa que cada lista se concatena en una secuencia larga (IEnumerable`1).

Tengo un diccionario siguiente:

IDictionary<int, IList<MyClass>> myDictionary

y quiero obtener todos los valores en el diccionario como IList ....

Solo para agregar un poco de antecedentes sobre cómo he llegado a esta situación ...

Tengo un método que me da una lista de MyClass. Luego tengo otro método que convierte esa lista en un diccionario donde la clave es la identificación para MyClass. Más tarde ... y sin acceso a esa lista original ... Necesito obtener la lista desagrupada original de MyClass.

Cuando paso myDictionary.Values.ToList () a un método que toma un IList, aparece un error de compilación que dice que no se puede convertir desde

System.Collections.Generic.List<System.Collections.Generic.IList<MyClass>>

a:

System.Collections.Generic.IList<MyClass>

Ahora puedo entender que ya no está y agregué cada uno de los grupos de IList a la nueva lista como elementos separados de la lista ... pero en este caso no es realmente lo que busco. Solo quiero una lista de todos los valores en todo el diccionario.

¿Cómo puedo obtener lo que busco sin pasar por cada uno de los valores clave en el diccionario y crear la lista que quiero?


Una variación de la sugerencia de John:

var flattenedValues = dict.Values.SelectMany(x => x);

Si los necesita en una lista, puede llamar a ToList:

var flattenedList = dict.Values.SelectMany(x => x).ToList();


Noté que muchas respuestas eran bastante viejas.

Esto también funcionará:

dict.Values.ToList();


Values obtiene una ICollection contiene los valores de su diccionario. Tal como lo implica la definición de su diccionario, se puede definir como una colección ICollection<IList<MyClass>> . Entonces, si realmente quieres un IList<IList<MyClass>> , usa la solución de spacedog .

Si lo que realmente quieres es un "IList" plano, entonces no hay otra solución que recorrer cada valor:

IList<MyClass> l=new List<MyClass>(); foreach (IList<MyClass> v in myDictionary.Values) l.AddRange(v);

Tenga en cuenta que esto es tan groseramente ineficiente que debería volver a pensar en usar un diccionario para lo que está tratando de lograr.