Exportar (0) Imprimir
Expandir todo

Método genérico Array.Sort (T[], Comparison genérico)

Ordena los elementos de una matriz Array utilizando el delegado Comparison especificado.

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

public static void Sort<T> (
	T[] array,
	Comparison<T> comparison
)
J# admite el uso de métodos y tipos genéricos, pero no admite la declaración de métodos y tipos nuevos.
JScript no admite el uso de métodos y tipos genéricos.
No aplicable.

Parámetros de tipo

T

Tipo de los elementos de la matriz.

Parámetros

array

Matriz Array unidimensional de base cero que se va a ordenar.

comparison

Delegado Comparison que se va a utilizar al comparar elementos.

Tipo de excepciónCondición

ArgumentNullException

array es referencia null (Nothing en Visual Basic).

O bien,

comparison es referencia 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 la ordenación no se realiza correctamente, los resultados quedarán sin definir.

Este método utiliza 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 la propiedad Length de array; 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.

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 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 una matriz 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()
    {
        string[] dinosaurs = {
            "Pachycephalosaurus",
            "Amargasaurus",
            "",
            null,
            "Mamenchisaurus",
            "Deinonychus" };
        Display(dinosaurs);

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

    }

    private static void Display(string[] arr)
    {
        Console.WriteLine();
        foreach( string s in arr )
        {
            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 Service Pack 4, 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

Microsoft .NET Framework 3.0 es compatible con Windows Vista, Microsoft Windows XP SP2 y Windows Server 2003 SP1.

.NET Framework

Compatible con: 3.0, 2.0

.NET Compact Framework

Compatible con: 2.0

XNA Framework

Compatible con: 1.0

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft