Tento článek byl přeložený strojově. Pokud chcete zobrazit článek v angličtině, zaškrtněte políčko Angličtina. Anglickou verzi článku můžete také zobrazit v místním okně přesunutím ukazatele myši nad text.
Překlad
Angličtina

Metoda Array.Sort<TKey, TValue>(TKey[], TValue[], Int32, Int32)

.NET Framework (current version)
 

Seřadí rozsahu prvků v dvojice Array objekty (jedna obsahuje klíče a druhá obsahuje odpovídající položky) na základě klíčů v prvním Array pomocí IComparable<T> Obecná implementace rozhraní každý klíč.

Obor názvů:   System
Sestavení:  mscorlib (v mscorlib.dll)

public static void Sort<TKey, TValue>(
	TKey[] keys,
	TValue[] items,
	int index,
	int length
)

Parametry

keys
Type: TKey[]

Jednorozměrné od nuly Array který obsahuje klíče řazení.

items
Type: TValue[]

Jednorozměrné od nuly Array obsahující položky, které odpovídají klíče v keys, nebo null Seřadit pouze keys.

index
Type: System.Int32

Počáteční index řazeném úseku.

length
Type: System.Int32

Počet prvků v řazeném úseku.

Parametry typu

TKey

Typ prvků pole klíčů.

TValue

Typ prvků pole položek.

Exception Condition
ArgumentNullException

keys je null.

ArgumentOutOfRangeException

index je menší než dolní mez keys.

- nebo -

length je menší než nula.

ArgumentException

items není null, a dolní mez keys neodpovídá dolní mez items.

- nebo -

items není null, a délku keys je větší než délka items.

- nebo -

index a length neurčují platný rozsah v keysArray.

- nebo -

items není null, a index a length neurčují platný rozsah v itemsArray.

InvalidOperationException

Jeden nebo více prvků v keysArray neimplementují IComparable<T> Obecné rozhraní.

Každý klíč v keysArray má odpovídající položku itemsArray. Když je během řazení, odpovídající položka v přesunuta klíč itemsArray se stejně i. Proto itemsArray seřazeno podle uspořádání odpovídající klíče v keysArray.

Každý klíč v rámci zadaného rozsahu prvků v keysArray musí implementovat IComparable<T> Obecná rozhraní dát porovnání každých klíčem.

Je možné řadit, pokud existuje více položek než klíčů, ale položky, které mají žádný klíč, seřazeny nebudou. Nelze řadit, pokud existuje více klíčů než položek, To uděláte to vyvolá ArgumentException.

Pokud řazení nebylo úspěšně dokončeno, nejsou výsledky definovány.

Tato metoda používá algoritmus introspektivní řazení (introsort) následujícím způsobem:

  • Je-li velikost oddílu menší než 16 prvků, používá insertion sort algoritmus.

  • Pokud počet oddílů překročí hodnotu 2 * LogN, kde N je rozsah vstupního pole používá Heapsort algoritmus.

  • Jinak použije Quicksort algoritmus.

Tato implementace provádí nestabilní řazení; To znamená pokud jsou dva prvky shodné, jejich pořadí nemusí zůstat zachováno. Stabilní řazení naproti zachovává pořadí prvků, které jsou si rovny.

Pro pole řazená pomocí algoritmů Heapsort a Quicksort v nejhorším případě, tato metoda je operace O (n protokolu n) operace, kde n je length.

Následující příklad kódu ukazujeSort<TKey, TValue>(TKey[], TValue[]), Sort<TKey, TValue>(TKey[], TValue[], IComparer<TKey>), Sort<TKey, TValue>(TKey[], TValue[], Int32, Int32), a Sort<TKey, TValue>(TKey[], TValue[], Int32, Int32, IComparer<TKey>) přetížení obecné metody pro řazení dvojic polí, které představují klíče a hodnoty.

Příklad kódu definuje alternativní porovnávací metodu pro řetězce s názvem ReverseCompare, která implementuje IComparer<string> (IComparer(Of String) v jazyce Visual Basic IComparer<String^> v jazyce Visual C++) obecného rozhraní. Porovnávací metoda volá CompareTo(String) Metoda obrácení směru porovnávaných položek, takže jsou řetězce seřazeny vysokou na malou namísto nejnižší nejvyšší.

Příklad kódu vytvoří a zobrazí pole názvů dinosaurů (klíče) a pole celých čísel reprezentujících maximální délku každého dinosaura v metrech (hodnoty). Pole jsou poté seřazeny a zobrazí několikrát:

System_CAPS_notePoznámka

Volání obecných metod pohled neliší od volání jejich protějšků, které obecné, protože Visual Basic, C# a C++ odvozují parametry obecného typu z typu prvních dvou argumentů. Pokud použijete Ildasm.exe (IL Disassembler) Prozkoumat Microsoft intermediate language (MSIL), uvidíte, že jsou v něm volány obecné metody.

using System;
using System.Collections.Generic;

public class ReverseComparer: IComparer<string>
{
    public int Compare(string x, string y)
    {
        // Compare y and x in reverse order.
        return y.CompareTo(x);
    }
}

public class Example
{
    public static void Main()
    {
        string[] dinosaurs = {
            "Seismosaurus", 
            "Chasmosaurus", 
            "Coelophysis", 
            "Mamenchisaurus", 
            "Caudipteryx", 
            "Cetiosaurus"  };

        int[] dinosaurSizes = { 40, 5, 3, 22, 1, 18 };

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.", 
                dinosaurs[i], dinosaurSizes[i]);
        }

        Console.WriteLine("\nSort(dinosaurs, dinosaurSizes)");
        Array.Sort(dinosaurs, dinosaurSizes);

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.", 
                dinosaurs[i], dinosaurSizes[i]);
        }

        ReverseComparer rc = new ReverseComparer();

        Console.WriteLine("\nSort(dinosaurs, dinosaurSizes, rc)");
        Array.Sort(dinosaurs, dinosaurSizes, rc);

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.", 
                dinosaurs[i], dinosaurSizes[i]);
        }

        Console.WriteLine("\nSort(dinosaurs, dinosaurSizes, 3, 3)");
        Array.Sort(dinosaurs, dinosaurSizes, 3, 3);

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.", 
                dinosaurs[i], dinosaurSizes[i]);
        }

        Console.WriteLine("\nSort(dinosaurs, dinosaurSizes, 3, 3, rc)");
        Array.Sort(dinosaurs, dinosaurSizes, 3, 3, rc);

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.", 
                dinosaurs[i], dinosaurSizes[i]);
        }
    }
}

/* This code example produces the following output:

Seismosaurus: up to 40 meters long.
Chasmosaurus: up to 5 meters long.
Coelophysis: up to 3 meters long.
Mamenchisaurus: up to 22 meters long.
Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.

Sort(dinosaurs, dinosaurSizes)

Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.
Chasmosaurus: up to 5 meters long.
Coelophysis: up to 3 meters long.
Mamenchisaurus: up to 22 meters long.
Seismosaurus: up to 40 meters long.

Sort(dinosaurs, dinosaurSizes, rc)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Chasmosaurus: up to 5 meters long.
Cetiosaurus: up to 18 meters long.
Caudipteryx: up to 1 meters long.

Sort(dinosaurs, dinosaurSizes, 3, 3)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.
Chasmosaurus: up to 5 meters long.

Sort(dinosaurs, dinosaurSizes, 3, 3, rc)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Chasmosaurus: up to 5 meters long.
Cetiosaurus: up to 18 meters long.
Caudipteryx: up to 1 meters long.
 */

Univerzální platforma Windows
K dispozici od 10
.NET Framework
K dispozici od 2.0
Silverlight
K dispozici od 2.0
Windows Phone Silverlight
K dispozici od 7.0
Zpět na začátek
Zobrazit: