¿Hay alguna manera de iterar sobre un diccionario, en orden ordenado, ordenado por VALOR no clave? Lo leí sobre el objeto "SortedDictionary", pero lamentablemente, eso está ordenado por clave. Una solución sería cambiar todas mis claves con mis valores y colocarlas en SortedDictionary (ya que son enteros). Sin embargo, tampoco estoy seguro de cómo hacerlo.C# Iterar sobre Diccionario ordenado por valor
Respuesta
Obtenga los pares de claves/valores, ordénelos e itere. Muerto fácil usando LINQ:
foreach(var pair in dictionary.OrderBy(p => p.Value)) {
// work with pair.Key and pair.Value
}
¡Ahh, gracias! :) Eso se ve exactamente como lo que necesito. Este LINQ que sigo escuchando, ¿qué es? –
@GeorgesOatesLarsen: es algo que te estás perdiendo al no usarlo. Es posible que desee leer [esto] (http://msdn.microsoft.com/en-us/library/bb308959.aspx) o Google (a estas alturas, habrá mejores presentaciones). – Jon
Para finalizar, el código se ha sugerido anteriormente (dictionary.OrderBy (p => Valor PD)) "no" para este tipo de trabajo personalizados.
OrderBy utiliza IComparable para poder comparar dos objetos. Si el valor de su diccionario es un tipo personalizado, entonces debe implementar IComparable para poder ordenar los valores de manera adecuada.
Leer en here.
"debe implementar IComparable" - no necesariamente. OrderBy() viene en dos sobrecargas. Uno de ellos se comporta como lo describió, pero el segundo acepta un objeto personalizado IComparable por lo que se puede ordenar cualquier tipo de valor. – DXM
@DXM, la otra sobrecarga acepta 'IComparer', no' IComparable', que no tendría mucho sentido. Además, no creo que esto tenga nada que ver con los tipos de valores, funciona igual para cualquier tipo. – svick
@svick - mi mal en el error tipográfico, tienes razón, es IComparer, pero esa segunda sobrecarga exactamente para lo que el OP está pidiendo. Puede escribir su propio objeto comparador para comparar todo lo que desee y alimentarlo en OrderBy(). Y por "valor" no quise decir valor vs. referencia. Quise decir valor vs. clave. Me doy cuenta de que el comparador trabajará con tipos de valores y tipos de referencia. Si está de acuerdo con esta respuesta, OrderBy solo puede ser utilizado por los tipos que implementan IComparable, ¿puede explicar para qué sirve esa segunda sobrecarga? – DXM
// diccionario ordenar por valor
foreach (KeyValuePair<datatype, datatype> item in dictionary)
{
//do something by value....accessing item.value
}
- 1. ¿Cómo iterar sobre un diccionario de Python, ordenado por valores?
- 2. Python iterar sobre un diccionario
- 3. Iterar sobre el diccionario anidado
- 4. Diccionario ordenado según el valor en C# (caché LRU)
- 5. Google Filtrar: iterar sobre un diccionario JSON
- 6. Diccionario revertido ordenado?
- 7. Diccionario revertido ordenado en .NET
- 8. ¿Hay alguna manera de iterar sobre un diccionario?
- 9. ¿Iterar sobre los diccionarios VBA?
- 10. ¿PHP tiene un diccionario ordenado?
- 11. Valor del diccionario C#
- 12. Cómo iterar sobre los niños por bucle
- 13. ¿Cómo puedo iterar sobre cin línea por línea en C++?
- 14. C++ :: Boost :: Regex Iterar sobre las subcompetencias
- 15. ¿Por qué parece que el diccionario .Net está ordenado?
- 16. ¿El diccionario Objective-C es un contenedor ordenado?
- 17. iterar sobre una tupla
- 18. F # iteración sobre un diccionario
- 19. ¿Cómo iterar sobre una cadena en C?
- 20. ¿Cómo iterar sobre caracteres Unicode en C++?
- 21. Imprimir un dict ordenado por valores
- 22. Ordenar un diccionario por valor
- 23. iterar sobre par clave/valor de una lista()
- 24. iterar sobre la tupla
- 25. por/ordenado por
- 26. preguntas sobre matriz ordenado por horas en php
- 27. Python: iterar sobre la lista de artículos de diccionario vs sobre la eficiencia
- 28. grupo LINQ por, ordenado por
- 29. ¿Cómo iterar sobre una priority_queue?
- 30. ¿Cómo iterar sobre un TreeMap?
¿Con qué frecuencia tiene que hacerlo? ¿Qué tan eficiente tiene que ser? ¿Estás dispuesto a intercambiar memoria para una mayor velocidad? – svick
Solo funcionará en aproximadamente 500 resultados, y solo una vez. Siempre dispuesto a intercambiar memoria para una mayor velocidad: D –