Array.Sort<T> Method (array<T[], Comparison<T>)
Microsoft Silverlight will reach end of support after October 2021. Learn more.
Sorts the elements in an Array using the specified Comparison<T>.
Namespace: System
Assembly: mscorlib (in mscorlib.dll)
Syntax
'Declaration
Public Shared Sub Sort(Of T) ( _
array As T(), _
comparison As Comparison(Of T) _
)
public static void Sort<T>(
T[] array,
Comparison<T> comparison
)
Type Parameters
- T
The type of the elements of the array.
Parameters
- array
Type: array<T[]
The one-dimensional, zero-based Array to sort
- comparison
Type: System.Comparison<T>
The Comparison<T> to use when comparing elements.
Exceptions
Exception | Condition |
---|---|
ArgumentNullException | array is nulla null reference (Nothing in Visual Basic). -or- comparison is nulla null reference (Nothing in Visual Basic). |
ArgumentException | The implementation of comparison caused an error during the sort. For example, comparison might not return 0 when comparing an item with itself. |
Remarks
If the sort is not successfully completed, the results are undefined.
This method uses the QuickSort algorithm. This implementation performs an unstable sort; that is, if two elements are equal, their order might not be preserved. In contrast, a stable sort preserves the order of elements that are equal.
On average, this method is an O(n log n) operation, where n is the Length of array; in the worst case it is an O(n ^ 2) operation.
Examples
The following code example demonstrates the Sort(Comparison<T>) method overload.
The code example defines an alternative comparison method for strings, named CompareDinosByLength. This method works as follows: First, the comparands are tested for nulla null reference (Nothing in Visual Basic), and a null reference is treated as less than a non-null. Second, the string lengths are compared, and the longer string is deemed to be greater. Third, if the lengths are equal, ordinary string comparison is used.
A array of strings is created and populated with four strings, in no particular order. The list also includes an empty string and a null reference. The list is displayed, sorted using a Comparison<T> generic delegate representing the CompareDinosByLength method, and displayed again.
Note: |
---|
To run this example, see Building Examples That Use a Demo Method and a TextBlock Control. |
Imports System.Collections.Generic
Public Class Example
Private Shared Function CompareDinosByLength( _
ByVal x As String, ByVal y As String) As Integer
If x Is Nothing Then
If y Is Nothing Then
' If x is Nothing and y is Nothing, they're
' equal.
Return 0
Else
' If x is Nothing and y is not Nothing, y
' is greater.
Return -1
End If
Else
' If x is not Nothing...
'
If y Is Nothing Then
' ...and y is Nothing, x is greater.
Return 1
Else
' ...and y is not Nothing, compare the
' lengths of the two strings.
'
Dim retval As Integer = _
x.Length.CompareTo(y.Length)
If retval <> 0 Then
' 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)
End If
End If
End If
End Function
Public Shared Sub Demo(ByVal outputBlock As System.Windows.Controls.TextBlock)
Dim dinosaurs() As String = { _
"Pachycephalosaurus", _
"Amargasaurus", _
"", _
Nothing, _
"Mamenchisaurus", _
"Deinonychus"}
Display(outputBlock, dinosaurs)
outputBlock.Text &= vbLf & "Sort with generic Comparison(Of String) delegate:" & vbCrLf
Array.Sort(dinosaurs, AddressOf CompareDinosByLength)
Display(outputBlock, dinosaurs)
End Sub
Private Shared Sub Display(ByVal outputBlock As System.Windows.Controls.TextBlock, ByVal arr() As String)
outputBlock.Text &= vbCrLf
For Each s As String In arr
If s Is Nothing Then
outputBlock.Text &= "(Nothing)" & vbCrLf
Else
outputBlock.Text += String.Format("""{0}""", s) & vbCrLf
End If
Next
End Sub
End Class
' This code example produces the following output:
'
'"Pachycephalosaurus"
'"Amargasaurus"
'""
'(Nothing)
'"Mamenchisaurus"
'"Deinonychus"
'
'Sort with generic Comparison(Of String) delegate:
'
'(Nothing)
'""
'"Deinonychus"
'"Amargasaurus"
'"Mamenchisaurus"
'"Pachycephalosaurus"
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 Demo(System.Windows.Controls.TextBlock outputBlock)
{
string[] dinosaurs = {
"Pachycephalosaurus",
"Amargasaurus",
"",
null,
"Mamenchisaurus",
"Deinonychus" };
Display(outputBlock, dinosaurs);
outputBlock.Text += "\nSort with generic Comparison<string> delegate:" + "\n";
Array.Sort(dinosaurs, CompareDinosByLength);
Display(outputBlock, dinosaurs);
}
private static void Display(System.Windows.Controls.TextBlock outputBlock, string[] arr)
{
outputBlock.Text += "\n";
foreach (string s in arr)
{
if (s == null)
outputBlock.Text += "(null)" + "\n";
else
outputBlock.Text += String.Format("\"{0}\"", s) + "\n";
}
}
}
/* This code example produces the following output:
"Pachycephalosaurus"
"Amargasaurus"
""
(null)
"Mamenchisaurus"
"Deinonychus"
Sort with generic Comparison<string> delegate:
(null)
""
"Deinonychus"
"Amargasaurus"
"Mamenchisaurus"
"Pachycephalosaurus"
*/
Version Information
Silverlight
Supported in: 5, 4, 3
Silverlight for Windows Phone
Supported in: Windows Phone OS 7.1, Windows Phone OS 7.0
XNA Framework
Supported in: Xbox 360, Windows Phone OS 7.0
Platforms
For a list of the operating systems and browsers that are supported by Silverlight, see Supported Operating Systems and Browsers.