Esta documentación está archivada y no tiene mantenimiento.

List.Sort (Método) (Comparison genérico)

Nota: este método es nuevo en la versión 2.0 de .NET Framework.

Ordena los elementos de todo el objeto List utilizando el delegado System.Comparison especificado.

Espacio de nombres: System.Collections.Generic
Ensamblado: mscorlib (en mscorlib.dll)

public void Sort (
	Comparison<T> comparison
)
public void Sort (
	Comparison<T> comparison
)
public function Sort (
	comparison : Comparison<T>
)

Parámetros

comparison

System.Comparison que se va a utilizar al comparar elementos.

Tipo de excepciónCondición

ArgumentNullException

El valor de comparison es referencia de objeto null (Nothing en Visual Basic).

ArgumentException

La implementación de comparison ha producido un error durante la ordenación. Por ejemplo, es posible que comparison no devuelva 0 al comparar un elemento con sigo mismo.

Si se proporciona comparison, los elementos de List se ordenan utilizando el método que representa el delegado.

Si comparison es referencia de objeto null (Nothing en Visual Basic), se produce una excepción ArgumentNullException.

Este método utiliza System.Array.Sort, que utiliza a su vez el algoritmo QuickSort. Esta implementación realiza una ordenación inestable; es decir, si hay dos elementos iguales, es posible que no se mantenga su orden. En contraste, una ordenación estable conserva el orden de los elementos que son iguales.

Este método suele ser una operación O(n log n), donde n es Count; aunque en el peor de los casos es una operación O(n^ 2).

En el ejemplo de código siguiente se muestra la sobrecarga del método Sort(Comparison genérico).

En el ejemplo de código se define un método de comparación alternativo para las cadenas, denominado CompareDinosByLength. Este método funciona de la siguiente manera: en primer lugar, se prueban los términos de la comparación para referencia de objeto null (Nothing en Visual Basic), y se considera una referencia nula como un valor menor que una referencia no nula. En segundo lugar, se compara la longitud de las cadenas, y la cadena más larga se considera la mayor. En tercer lugar, si las longitudes son iguales, se utiliza la comparación de cadena ordinaria.

Se crea un objeto List de cadenas y se rellena de cuatro cadenas, sin un orden concreto. La lista también incluye una cadena vacía y una referencia nula. Se muestra la lista, luego se ordena utilizando un delegado genérico Comparison que representa al método CompareDinosByLength y se vuelve a mostrar nuevamente.

using System;
using System.Collections.Generic;

public class Example
{
    private static int CompareDinosByLength(string x, string y)
    {
        if (x == null)
        {
            if (y == null)
            {
                // If x is null and y is null, they're
                // equal. 
                return 0;
            }
            else
            {
                // If x is null and y is not null, y
                // is greater. 
                return -1;
            }
        }
        else
        {
            // If x is not null...
            //
            if (y == null)
                // ...and y is null, x is greater.
            {
                return 1;
            }
            else
            {
                // ...and y is not null, compare the 
                // lengths of the two strings.
                //
                int retval = x.Length.CompareTo(y.Length);

                if (retval != 0)
                {
                    // If the strings are not of equal length,
                    // the longer string is greater.
                    //
                    return retval;
                }
                else
                {
                    // If the strings are of equal length,
                    // sort them with ordinary string comparison.
                    //
                    return x.CompareTo(y);
                }
            }
        }
    }

    public static void Main()
    {
        List<string> dinosaurs = new List<string>();
        dinosaurs.Add("Pachycephalosaurus");
        dinosaurs.Add("Amargasaurus");
        dinosaurs.Add("");
        dinosaurs.Add(null);
        dinosaurs.Add("Mamenchisaurus");
        dinosaurs.Add("Deinonychus");
        Display(dinosaurs);

        Console.WriteLine("\nSort with generic Comparison<string> delegate:");
        dinosaurs.Sort(CompareDinosByLength);
        Display(dinosaurs);

    }

    private static void Display(List<string> list)
    {
        Console.WriteLine();
        foreach( string s in list )
        {
            if (s == null)
                Console.WriteLine("(null)");
            else
                Console.WriteLine("\"{0}\"", s);
        }
    }
}

/* This code example produces the following output:

"Pachycephalosaurus"
"Amargasaurus"
""
(null)
"Mamenchisaurus"
"Deinonychus"

Sort with generic Comparison<string> delegate:

(null)
""
"Deinonychus"
"Amargasaurus"
"Mamenchisaurus"
"Pachycephalosaurus"
 */

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium, Windows Mobile para Pocket PC, Windows Mobile para Smartphone, Windows Server 2003, Windows XP Media Center, Windows XP Professional x64, Windows XP SP2, Windows XP Starter Edition

.NET Framework no admite todas las versiones de cada plataforma. Para obtener una lista de las versiones admitidas, vea Requisitos del sistema.

.NET Framework

Compatible con: 2.0

.NET Compact Framework

Compatible con: 2.0
Mostrar: