Índice
1. Introducción2. 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]:
csc /t:exe UsoDictionary.cs
.\UsoDictionary.exe
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):
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):
Demostración ejecución assembly (local):
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):
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_3004984382Pregunta 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.