Cómo ordenar arreglos en C#
Veamos tres métodos que podemos aprovechar para ordenar arreglos en C# de forma práctica.

En esta entrada te presentaré las formas más comunes de hacer un ordenamiento en el lenguaje C#.

Sólo para estar alineados definiremos qué es un arreglo y una colección:

Un arreglo es en el argot del mundo de la programación, un conjunto finito y ordenado de elementos homogéneos.

También es llamado vector, matriz unidimensional o array.

Algunos dicen que arreglo es una mala traducción del inglés Array, pero ese es otro cantar, otro tema 😁

Una colección, lista o también llamado list, es un tipo de datos propio de .NET que almacena una secuencia de variables del mismo tipo de dato. En cierta forma son muy similares a los arreglos, lo menciono porque suelen confundirse con los arrays, aunque no son lo mismo, son muy similares. Para ordenar listas puedes hacer uso del tercer método que aquí te presentaré: Linq.

Muy bien, ahora ya con los conceptos claros, comencemos, te presentaré 3 formas, para mí, las más comunes y las que usarás casi siempre. Para cada forma de ordenamiento pondré el código de un programa en consola con C# para ejemplificar.

Sort y Reverse

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Ordenamiento por Sort y Reverse");
            int[] arregloNumeros = new int[] { 1, 4, 2, 7, 55, 9, 7, 10, 99, 3 };
            string[] arregloPalabras = new string[] { "gerson", "eder", "azabache", "martínez" };

            Array.Sort(arregloNumeros);
            Array.Sort(arregloPalabras);

            Console.WriteLine(string.Join(", ", arregloNumeros));
            Console.WriteLine(string.Join(", ", arregloPalabras));
        }
    }

El resultado de este código es el siguiente:

Como notamos se ha ordenado de forma ascendente tanto para un arreglo de números como para strings osea cadenas.

Si queremos hacer un ordenamiento descendente tendríamos primero que ordenar el array con Sort, como acabamo de ver, y después aplicar un Reverse:

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Ordenamiento por Sort y Reverse");
            int[] arregloNumeros = new int[] { 1, 4, 2, 7, 55, 9, 7, 10, 99, 3 };
            string[] arregloPalabras = new string[] { "gerson", "eder", "azabache", "martínez" };

            Array.Sort(arregloNumeros);
            Array.Sort(arregloPalabras);

            Array.Reverse(arregloNumeros);
            Array.Reverse(arregloPalabras);

            Console.WriteLine(string.Join(", ", arregloNumeros));
            Console.WriteLine(string.Join(", ", arregloPalabras));
        }
    }

Array.Reverse no ordena de forma descendente, lo que hace es dar la vuelta al array

Como podrás notar, es muy directo y al grano, bien.

Con string.Join puedes concatenar un array para efectos de mostrarlo en pantalla, toma nota crack! 😉

Comparison

Por comparación también se puede ordenar arrays, veamos el siguiente programa de consola:

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Ordenamiento por Comparison");
            int[] arregloNumeros = new int[] { 1, 4, 2, 7, 55, 9, 7, 10, 99, 3 };
            string[] arregloPalabras = new string[] { "gerson", "eder", "azabache", "martínez" };

            Array.Sort<int>(arregloNumeros, new Comparison<int>((i1, i2) => i1.CompareTo(i2)));
            Array.Sort<string>(arregloPalabras, new Comparison<string>((i1, i2) => i1.CompareTo(i2)));

            //De este modo alternativo el ordenamiento sería descendente
            //Array.Sort<int>(arregloNumeros, new Comparison<int>((i1, i2) => i2.CompareTo(i1)));
            //Array.Sort<string>(arregloPalabras, new Comparison<string>((i1, i2) => i2.CompareTo(i1)));

            Console.WriteLine(string.Join(", ", arregloNumeros));
            Console.WriteLine(string.Join(", ", arregloPalabras));
        }
    }

He incluído también cómo se haría para ordenar de forma descendente.

Linq

Finalmente podemos aprovechar el potente poder de cómputo que nos provee LINQ, para más información puedes leer este artículo.

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Ordenamiento por Linq");
            int[] arregloNumeros = new int[] { 1, 4, 2, 7, 55, 9, 7, 10, 99, 3 };
            string[] arregloPalabras = new string[] { "gerson", "eder", "azabache", "martínez" };

            arregloNumeros = arregloNumeros.OrderBy(x => x).ToArray();
            arregloPalabras = arregloPalabras.OrderBy(x => x).ToArray();

            //Ordenamientos descendientes
            //arregloNumeros = arregloNumeros.OrderByDescending(x => x).ToArray();
            //arregloPalabras = arregloPalabras.OrderByDescending(x => x).ToArray();

            Console.WriteLine(string.Join(", ", arregloNumeros));
            Console.WriteLine(string.Join(", ", arregloPalabras));
        }
    }

Si lo probamos tendremos el mismo resultado, los arrays ordenados. He incluído también cómo se ordenaría de forma descendente.

Ojo crack, todo este código está disponible en mi repositorio en Github, disponible en https://github.com/GeaSmart/OrderingInCSharp

Yes, ahora ya sabes.

Pues bien ahora crack, ya sabes como hacer el ordenamiento de 3 formas distintas en C# funcional tanto en .NET Framework como en .NET Core.

Si esta entrada te ha ayudado crack, compártelo 😉

Deja una respuesta

Tu dirección de correo electrónico no será publicada.