Anuncios

Bienvenidos sean a este post, hoy veremos un metodo para los objetos List.

Anuncios

Este metodo nos permite ordenar lexicograficamente los elementos de una lista alterando sus posiciones internas, veamos su sintaxis:

lista.Sort();
Anuncios

Esto hace que se utilice el comparador predeterminado y ordenandolo bajo el criterio del lenguaje, veamos otra sintaxis:

lista.Sort(comparador);
Anuncios

En este caso le especificamos un comparador para que reemplace al comparador predeterminado, este habitualmente es una funcion, veamos otra sintaxis posible:

lista.Sort(posicion, cantidad, comparador);
Anuncios

Esta establece el rango donde ordenaremos la lista, la posicion sera desde cual comenzaremos y la cantidad seran las posiciones que procesara, por ultimo podemos pasar un comparador como en el caso anterior pero si pasamos null usara el predeterminado, con todo esto comentado vamos a analizar un ejemplo, para ello vamos a crear un archivo con el nombre de ordenar.cs y le agregaremos el siguiente codigo:

ordenar.cs

using System;
using System.Collections.Generic;

public class Program
{
	static void Main()
	{
		string[] arr = {"tinchicus","enzo","ariel","javier","raul",
				"juan","charly","gustavo"};
		List<string> nombres = new List<string>(arr);

		nombres.Sort();

		for(int i=0; i < nombres.Count; i++)
			Console.WriteLine("Nombre #{0}: {1}", i, nombres[i]);
	}
}
Anuncios

Este es e codigo mas simple posible donde definiremos un array con una serie de nombres, luego un List donde contendra como datos el array anterior, lo siguiente sera aplicar el metodo a nombres y por ultimo por medio de un bucle pasamos por el List ordenado, con todo comentado vamos a ver su salida:

C:\Users\tinchicus>ordenar.exe
Nombre #0: ariel
Nombre #1: charly
Nombre #2: enzo
Nombre #3: gustavo
Nombre #4: javier
Nombre #5: juan
Nombre #6: raul
Nombre #7: tinchicus

C:\Users\tinchicus>
Anuncios

Como pueden ver se ordeno alfabeticamente o lexicograficamente, ahora tomemos el codigo anterior y vamos a modificarlo de la siguiente manera:

using System;
using System.Collections.Generic;

public class Program
{
	static void Main()
	{
		string[] arr = {"tinchicus","enzo","ariel","javier","raul",
				"juan","charly","gustavo"};
		List<string> nombres = new List<string>(arr);

		nombres.Sort(0, 5, null);

		for(int i=0; i < nombres.Count; i++)
			Console.WriteLine("Nombre #{0}: {1}", i, nombres[i]);
	}
}
Anuncios

En este caso solo modificamos el metodo para que ordene un rango el cual ira desde la posicion cero hasta cinco posiciones y las ordenara, en este caso le pasamos null para que lo ordene con el comparador predeterminado, veamos como es la nueva salida:

C:\Users\tinchicus>ordenar.exe
Nombre #0: ariel
Nombre #1: enzo
Nombre #2: javier
Nombre #3: raul
Nombre #4: tinchicus
Nombre #5: juan
Nombre #6: charly
Nombre #7: gustavo

C:\Users\tinchicus>
Anuncios

Aqui se ordenaron las primeras cinco posiciones pero las ultimas tres se mantuvieron como fueron cargadas originalmente, por ultimo vamos a modificar el codigo de la siguiente forma:

using System;
using System.Collections.Generic;

public class Program
{
	static int CompararPorTamano(string x, string y)
	{
		if (x == null)
		{
			if (y == null)
				return 0;
			else
				return -1;
		} else {
			if (y == null)
			{
				return 1;
			} else {
				int v = x.Length.CompareTo(y.Length);

				if (v != 0)
					return v;
				else
					return x.CompareTo(y);
			}
		}
	}

	static void Main()
	{
		string[] arr = {"tinchicus","enzo","ariel","javier","raul",
				"juan","charly","gustavo"};
		List<string> nombres = new List<string>(arr);

		nombres.Sort(CompararPorTamano);

		for(int i=0; i < nombres.Count; i++)
			Console.WriteLine("Nombre #{0}: {1}", i, nombres[i]);
	}
}
Anuncios
Anuncios

En este caso agregamos una nueva funcion, la cual se encargara de comparar por tamaño para ordenarlo de esta forma, esta recibira dos valores para compararlos entre si, vamos de a poco, el primer condicional chequea si x es igual a null en caso de ser verdadero chequea si y es igual a null, si esto se cumple procede a devolver 0 porque ambos son nulos de lo contrario si y es distinto de null devuelve el -1 porque y es mas grande que x, el else que sigue es para cuando x es distinto de null y chequeamos si y es igual a null, en caso de ser verdadero siginifica que x es mas grande por lo tanto devuelve 1, este else se usara para cuando x e y son distinto de null, analicemos el bloque donde lo primero que haremos sera almacenar en una variable el resultado de comparar la longitud o cantidad de caracteres entre x e y, en caso de ser distinto de 0 indicara que una es mas larga que la otra y devolvera la mas corta, el else es para cuando son iguales y en este caso devolveremos el orden lexicografico, basicamente este ultimo bloque sera el encargado de hacer la magia 😄, despues volvemos a modificar el metodo Sort y ahora le pasamos el nombre de la funcion, con todo esto comentado veamos la nueva salida:

C:\Users\tinchicus>ordenar.exe
Nombre #0: enzo
Nombre #1: juan
Nombre #2: raul
Nombre #3: ariel
Nombre #4: charly
Nombre #5: javier
Nombre #6: gustavo
Nombre #7: tinchicus

C:\Users\tinchicus>
Anuncios

Observemos la nueva salida, ahora se ordeno por cantidad de caracteres de cada nombres y en los casos de ser la misma cantidad se ordeno alfabeticamente, con esto pueden ver como ordenar de otra forma en base a la necesidad de nuestro codigo.

Anuncios

En resumen, hoy hemos visto Sort, que es, para que sirve, como se utiliza, un ejemplo donde fuimos utilizando las distintas sintaxis del metodo, espero les haya sido de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios
pp258

Donación

Es para mantenimento del sitio, gracias!

$1.50

Anuncio publicitario