domingo, 27 de marzo de 2016

Pregunta C# (19 de 20): ¿Cómo Ordenar un Diccionario por Valor?

Índice

1. Introducción
2. Palabras Clave
3. Contexto
3.1 LINQ
3.2 Dictionary<TKey, TValue>
4. Ordenamiento Diccionario por Valor
5. Recursos
6. Conclusiones
7. Literatura & Enlaces

1. Introducción

Penúltima pregunta C# de la iteración de Twenty C# Questions Answered de Microsoft Virtual Academy. En esta oportunidad se presenta la solución en código fuente C# para ordenar el contenido de un diccionario por valor. Para lograrlo se hace uso de LINQ: una consulta simple de este lenguaje es suficiente, además de simple, para ordenar los elementos por valor de una colección de este tipo.

2. Palabras Clave

  • Colección
  • Diccionario
  • LINQ

3. Contexto

3.1 LINQ

[Nota: En la sección 3.1 de la pregunta C# Pregunta C# (18 de 20): ¿Cómo Eliminar Datos Duplicados de un Arreglo? se explica el uso de este lenguaje de consulta.]

3.2 Dictionary<TKey, TValue;gt;

Con la clase Dictionary<TKey, TValue> ("Dictionary(TKey, TValue) Class" 2016), se representa la estructura de datos basada en llave-valor.

Archivo C# UsoDictionary.cs [Enlace alternativo][Enlace alternativo]:

Compilación:

csc /t:exe UsoDictionary.cs


Ejecución assembly:

.\UsoDictionary.exe


Demostración ejecución assembly (ideone.com): http://ideone.com/QJt2Wl


La extensión `png` está asociada con `SnagIt Editor`.
La extensión `txt` está asociada con `Notepad++`.
La extensión `html` está asociada con `Google Chrome`.
La extensión `docx` está asociada con `Microsoft Word`.


Demostración ejecución assembly (local): 
Ejecución assembly UsoDictionary.exe
Figura 1. Ejecución assembly UsoDictionary.exe.

4. Ordenamiento Diccionario por Valor

En este código de demostración de ordenamiento de los elementos de un diccionario por valor se usa LINQ para crear la consulta de ordenamiento del diccionario.

En la línea 12 se crea un objeto Dictionary con los tipos paramétricos string. Con las líneas 15-19 se agregan los números de 1-5 con sus correspondientes valores como cadenas de caracteres.

Continuando, con la consulta LINQ 

from dicElemento in dicNumeros orderby dicElemento.Value
ascending select dicElemento;

se toma cada elemento del objeto dicNumeros y se ordena por -orderby- por el valor -Value- de cada elemento: dicElemento.Value. Debido a que el tipo de dato para Value es string, el ordenamiento se realiza de forma alfabética en orden ascendente -ascending-.

Con el ciclo foreach de las líneas 26-29 se imprime el diccionario ordenado -dicNumerosOrdenadosPorValor- en la salida estándar.

Compilación:

csc /t:exe OrdenamientoDiccionarioValor.cs

Ejecución assembly

.\OrdenamientoDiccionarioValor.exe

Demostración ejecución assembly (ideone.com): 


[5, Cinco]
[4, Cuatro]
[2, Dos]
[3, Tres]
[1, Uno]

Demostración ejecución assembly (local): 
Ejecución assembly OrdenamientoDiccionarioValor.exe
Figura 2. Ejecución assembly OrdenamientoDiccionarioValor.exe.

5. Recursos

Este es el vídeo en donde el equipo de expertos Gerry O'Brein y Paul Pardi de MVA, responden y explican esta pregunta:

6. Conclusiones

Quedó demostrado que con el lenguaje de consulta integrado LINQ es posible, gracias a su expresividad y poder, ordenar los elementos de un diccionario por valor.

En la última pregunta C# se demuestra cómo retornar múltiples valores desde una función.

7. Literatura & Enlaces

Top C# Questions Answered | Microsoft Virtual Academy (2016, marzo 27). Recuperado desde: https://mva.microsoft.com/en-US/training-courses/twenty-c-questions-answered-8298?l=ZhKJ2WYy_3004984382
Pregunta C# (18 de 20): ¿Cómo Eliminar Datos Duplicados de un Arreglo? (2016, marzo 27). Recuperado desde: http://ortizol.blogspot.com/2016/03/pregunta-csharp-18-de-20-como-eliminar-datos-duplicados-de-un-arreglo.html
Dictionary(TKey, TValue) Class (System.Collections.Generic) (2016, marzo 27). Recuperado desde: https://msdn.microsoft.com/en-us/library/xfhwa508.aspx


V

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.