Comparar y ordenar datos para una referencia cultural específica
Las convenciones para ordenar y clasificar datos varían según las referencias culturales. Por ejemplo, en el criterio de ordenación se pueden distinguir o no mayúsculas y minúsculas. Se puede basar en la fonética o en la representación visual de los caracteres. En los idiomas de Asia oriental, los caracteres se ordenan teniendo en cuenta los trazos y el radical de los ideogramas. El criterio de ordenación también depende del orden que se emplea en los distintos idiomas y referencias culturales para el alfabeto. Por ejemplo, el idioma danés tiene un carácter "Æ" que se ordena después de la "Z" en el alfabeto. Una aplicación de uso internacional debe ser capaz de comparar y ordenar datos basándose en la referencia cultural, con el objetivo de ser compatible con convenciones de ordenación específicas del idioma y de la referencia cultural.
Nota
Hay escenarios en los que no es deseable el comportamiento que tiene en cuenta la referencia cultural.Para obtener más información sobre cuándo y cómo realizar operaciones que no tienen en cuenta las referencias culturales, vea Operaciones de cadena que no tienen en cuenta las referencias culturales.
La clase CompareInfo proporciona métodos que se pueden usar para realizar comparaciones de cadenas que tengan en cuenta la referencia cultural. La clase CultureInfo tiene una propiedad CompareInfo que obtiene una instancia de la clase CompareInfo. Un objeto CompareInfo define cómo comparar y ordenar cadenas para una referencia cultural específica. El método String.Compare utiliza la información del objeto CompareInfo de una referencia cultural para comparar las cadenas.
En el ejemplo siguiente se ilustra cómo el método String.Compare evalúa dos cadenas ("Apple" y "Æble") de forma diferente en función de la referencia cultural usada para la comparación. En primer lugar, la propiedad System.Threading.Thread.CurrentThread.CurrentCulture se establece en da-DK para la referencia cultural Danés (Dinamarca). En el idioma danés, el carácter "Æ" se trata como carácter individual y se ordena después de la "Z" en el alfabeto. Por lo tanto, se determina que la cadena "Æble" es mayor que "Apple" para la referencia cultural Danés (Dinamarca). A continuación, la propiedad System.Threading.Thread.CurrentThread.CurrentCulture se establece en-US para la referencia cultural Inglés (Estados Unidos). El idioma inglés considera el carácter "Æ" como un símbolo especial y lo ordena antes de la letra "A" en el alfabeto. Por lo tanto, se determina que la cadena "Æble" es menor que "Apple" para la referencia cultural Inglés (Estados Unidos).
Imports System.Globalization
Imports System.Threading
Public Class TestClass
Public Shared Sub Main()
Dim str1 As String = "Apple"
Dim str2 As String = "Æble"
' Set the current culture to Danish in Denmark.
Thread.CurrentThread.CurrentCulture = New CultureInfo("da-DK")
Dim result1 As Integer = [String].Compare(str1, str2)
Console.WriteLine("When the CurrentCulture is ""da-DK"",")
Console.WriteLine("the result of comparing_{0} with {1} is: {2}",
str1, str2, result1)
' Set the current culture to English in the U.S.
Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US")
Dim result2 As Integer = [String].Compare(str1, str2)
Console.WriteLine("When the CurrentCulture is""en-US"",")
Console.WriteLine("the result of comparing {0} with {1} is: {2}",
str1, str2,result2)
End Sub
End Class
' The example displays the following output:
' When the CurrentCulture is "da-DK",
' the result of comparing Apple with Æble is: -1
'
' When the CurrentCulture is "en-US",
' the result of comparing Apple with Æble is: 1
using System;
using System.Globalization;
using System.Threading;
public class CompareStringSample
{
public static void Main()
{
string str1 = "Apple";
string str2 = "Æble";
// Sets the CurrentCulture to Danish in Denmark.
Thread.CurrentThread.CurrentCulture = new CultureInfo("da-DK");
// Compares the two strings.
int result1 = String.Compare(str1, str2);
Console.WriteLine("\nWhen the CurrentCulture is \"da-DK\",\nthe " +
"result of comparing {0} with {1} is: {2}", str1, str2,
result1);
// Sets the CurrentCulture to English in the U.S.
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
// Compares the two strings.
int result2 = String.Compare(str1, str2);
Console.WriteLine("\nWhen the CurrentCulture is \"en-US\",\nthe " +
"result of comparing {0} with {1} is: {2}", str1, str2,
result2);
}
}
// The example displays the following output:
// When the CurrentCulture is "da-DK",
// the result of comparing Apple with Æble is: -1
//
// When the CurrentCulture is "en-US",
// the result of comparing Apple with Æble is: 1
Para obtener más información sobre cómo comparar cadenas, vea Comparar cadenas.
Algunas referencias culturales admiten más de un criterio de ordenación. Por ejemplo, la referencia cultural zh-CN (chino ‑ RPC), admite dos criterios de ordenación: por pronunciación (predeterminado) y por número de trazos. Cuando se crea un objeto CultureInfo usando un nombre de referencia cultural (por ejemplo, zh-CN), se emplea el criterio de ordenación predeterminado. Para especificar el criterio de ordenación alternativo, cree un objeto CultureInfo llamando a los constructores CultureInfo.CultureInfo(Int32) o CultureInfo.CultureInfo(Int32, Boolean) y usando el identificador del criterio de ordenación alternativo y, a continuación, obtenga un objeto CompareInfo de la propiedad CompareInfo para utilizarlo en las comparaciones de cadenas. También puede crear directamente un objeto CompareInfo con el método CompareInfo.GetCompareInfo y especificar el identificador correspondiente al criterio de ordenación alternativo.
En la tabla siguiente se enumeran las referencias culturales que admiten criterios de ordenación alternativos, y los identificadores para los criterios de ordenación predeterminados y alternativos.
Nombre de referencia cultural |
Referencia cultural |
Nombre e identificador de ordenación predeterminada |
Nombre e identificador de ordenación alternativa |
---|---|---|---|
es-ES |
Español (España) |
Internacional: 0x00000C0A |
Tradicional: 0x0000040A |
zh-TW |
Chino (Taiwán) |
Número de trazos: 0x00000404 |
Bopomofo: 0x00030404 |
zh-CN |
Chino (RPC) |
Pronunciación: 0x00000804 |
Número de trazos: 0x00020804 |
zh-HK |
Chino (Zona administrativa especial de Hong Kong) |
Número de trazos: 0x00000c04 |
Número de trazos: 0x00020c04 |
zh-sg |
Chino (Singapur) |
Pronunciación: 0x00001004 |
Número de trazos: 0x00021004 |
zh-MO |
Chino (Macao RAE) |
Pronunciación: 0x00001404 |
Número de trazos: 0x00021404 |
ja-JP |
Japonés (Japón) |
Predeterminada: 0x00000411 |
Unicode: 0x00010411 |
ko-KR |
Coreano (Corea) |
Predeterminada: 0x00000412 |
Xwansung coreano - Unicode: 0x00010412 |
de-DE |
Alemán (Alemania) |
Diccionario: 0x00000407 |
Ordenación de libreta de teléfonos DIN: 0x00010407 |
hu-HU |
Húngaro (Hungría) |
Predeterminada: 0x0000040e |
Ordenación técnica: 0x0001040e |
ka-GE |
Georgiano (Georgia) |
Tradicional: 0x00000437 |
Alfabetización internacional: 0x00010437 |
Puede llamar al método CompareInfo.IndexOf sobrecargado para recuperar el índice con base cero de un carácter o subcadena dentro de una cadena especificada. El método devuelve -1 si no se encuentra el carácter o la cadena. Cuando se busca un carácter determinado, las sobrecargas del método IndexOf que aceptan un parámetro de tipo CompareOptions pueden realizar la comparación de forma diferente a las sobrecargas del método que no aceptan este parámetro. Las sobrecargas del método sin este parámetro realizan una búsqueda que depende de la referencia cultural y distingue entre mayúsculas y minúsculas. Por ejemplo, un valor Unicode que representa un carácter compuesto, como la ligadura "Æ" (\u00C6), puede que se considere equivalente a cualquier aparición de sus componentes en la secuencia correcta, como "AE" (\u0041\u0045), en función de la referencia cultural. Para realizar una búsqueda ordinal (sin tener en cuenta la referencia cultural) de valores Unicode exactos, use una de las sobrecargas de CompareInfo.IndexOf que toman un parámetro de tipo CompareOptions y establezca el parámetro en Ordinal.
También puede llamar a las sobrecargas del método String.IndexOf que buscan un carácter para realizar una búsqueda ordinal (sin tener en cuenta la referencia cultural). Tenga presente que las sobrecargas de este método que buscan una cadena realizan una búsqueda que tiene en cuenta la referencia cultural.
En el ejemplo siguiente se ilustra la diferencia entre los resultados devueltos por el método CompareInfo.IndexOf en función de la referencia cultural. El ejemplo crea un objeto CultureInfo para las referencias culturales Danés (Dinamarca) e Inglés (Estados Unidos) y utiliza las sobrecargas del método CompareInfo.IndexOf para buscar el carácter "æ" en las cadenas "æble" y "aeble". Para la referencia cultural Danés (Dinamarca), el método CompareInfo.IndexOf(String, Char) y el método CompareInfo.IndexOf(String, Char, CompareOptions) que tiene una opción de comparación CompareOptions.Ordinal devuelven el mismo valor para cada cadena. Esto indica que el carácter "æ" solo se considera equivalente al valor Unicode \u00E6. Para la referencia cultural Inglés (Estados Unidos), las dos sobrecargas devuelven resultados distintos al buscar "æ" en la cadena "aeble". Esto indica que la comparación que tiene en cuenta la referencia cultural realizada por el método CompareInfo.IndexOf(String, Char) evalúa el carácter "æ" como equivalente a sus componentes "a" y "e".
Imports System.Globalization
Imports System.Threading
Public Class Example
Public Shared Sub Main()
Dim str1 As String = "æble"
Dim str2 As String = "aeble"
Dim find As Char = "æ"c
' Create CultureInfo objects representing the Danish (Denmark)
' and English (United States) cultures.
Dim cultures() As CultureInfo = { CultureInfo.CreateSpecificCulture("da-DK"),
CultureInfo.CreateSpecificCulture("en-US") }
For Each ci In cultures
Thread.CurrentThread.CurrentCulture = ci
Dim result1 As Integer = ci.CompareInfo.IndexOf(str1, find)
Dim result2 As Integer = ci.CompareInfo.IndexOf(str2, find)
Dim result3 As Integer = ci.CompareInfo.IndexOf(str1, find, _
CompareOptions.Ordinal)
Dim result4 As Integer = ci.CompareInfo.IndexOf(str2, find, _
CompareOptions.Ordinal)
Console.WriteLine("The current culture is {0}",
CultureInfo.CurrentCulture.Name)
Console.WriteLine()
Console.WriteLine(" CompareInfo.IndexOf(string, char) method:")
Console.WriteLine(" Position of {0} in the string {1}: {2}",
find, str1, result1)
Console.WriteLine()
Console.WriteLine(" CompareInfo.IndexOf(string, char) method:")
Console.WriteLine(" Position of {0} in the string {1}: {2}",
find, str2, result2)
Console.WriteLine()
Console.WriteLine(" CompareInfo.IndexOf(string, char, CompareOptions.Ordinal) method")
Console.WriteLine(" Position of {0} in the string {1}: {2}",
find, str1, result3)
Console.WriteLine()
Console.WriteLine(" CompareInfo.IndexOf(string, char, CompareOptions.Ordinal) method")
Console.WriteLine(" Position of {0} in the string {1}: {2}",
find, str2, result4)
Console.WriteLine()
Next
End Sub
End Class
' The example displays the following output:
' The current culture is da-DK
'
' CompareInfo.IndexOf(string, char) method:
' Position of æ in the string æble: 0
'
' CompareInfo.IndexOf(string, char) method:
' Position of æ in the string aeble: -1
'
' CompareInfo.IndexOf(string, char, CompareOptions.Ordinal) method
' Position of æ in the string æble: 0
'
' CompareInfo.IndexOf(string, char, CompareOptions.Ordinal) method
' Position of æ in the string aeble: -1
'
' The current culture is en-US
'
' CompareInfo.IndexOf(string, char) method:
' Position of æ in the string æble: 0
'
' CompareInfo.IndexOf(string, char) method:
' Position of æ in the string aeble: 0
'
' CompareInfo.IndexOf(string, char, CompareOptions.Ordinal) method
' Position of æ in the string æble: 0
'
' CompareInfo.IndexOf(string, char, CompareOptions.Ordinal) method
' Position of æ in the string aeble: -1
using System;
using System.Globalization;
using System.Threading;
public class Example
{
public static void Main()
{
string str1 = "æble";
string str2 = "aeble";
char find = 'æ';
// Create CultureInfo objects representing the Danish (Denmark)
// and English (United States) cultures.
CultureInfo[] cultures = { CultureInfo.CreateSpecificCulture("da-DK"),
CultureInfo.CreateSpecificCulture("en-US") };
foreach (var ci in cultures) {
Thread.CurrentThread.CurrentCulture = ci;
int result1 = ci.CompareInfo.IndexOf(str1, find);
int result2 = ci.CompareInfo.IndexOf(str2, find);
int result3 = ci.CompareInfo.IndexOf(str1, find,
CompareOptions.Ordinal);
int result4 = ci.CompareInfo.IndexOf(str2, find,
CompareOptions.Ordinal);
Console.WriteLine("\nThe current culture is {0}",
CultureInfo.CurrentCulture.Name);
Console.WriteLine("\n CompareInfo.IndexOf(string, char) method:");
Console.WriteLine(" Position of {0} in the string {1}: {2}",
find, str1, result1);
Console.WriteLine("\n CompareInfo.IndexOf(string, char) method:");
Console.WriteLine(" Position of {0} in the string {1}: {2}",
find, str2, result2);
Console.WriteLine("\n CompareInfo.IndexOf(string, char, CompareOptions.Ordinal) method");
Console.WriteLine(" Position of {0} in the string {1}: {2}",
find, str1, result3);
Console.WriteLine("\n CompareInfo.IndexOf(string, char, CompareOptions.Ordinal) method");
Console.WriteLine(" Position of {0} in the string {1}: {2}",
find, str2, result4);
Console.WriteLine();
}
}
}
// The example displays the following output
// The current culture is da-DK
//
// CompareInfo.IndexOf(string, char) method:
// Position of æ in the string æble: 0
//
// CompareInfo.IndexOf(string, char) method:
// Position of æ in the string aeble: -1
//
// CompareInfo.IndexOf(string, char, CompareOptions.Ordinal) method
// Position of æ in the string æble: 0
//
// CompareInfo.IndexOf(string, char, CompareOptions.Ordinal) method
// Position of æ in the string aeble: -1
//
//
// The current culture is en-US
//
// CompareInfo.IndexOf(string, char) method:
// Position of æ in the string æble: 0
//
// CompareInfo.IndexOf(string, char) method:
// Position of æ in the string aeble: 0
//
// CompareInfo.IndexOf(string, char, CompareOptions.Ordinal) method
// Position of æ in the string æble: 0
//
// CompareInfo.IndexOf(string, char, CompareOptions.Ordinal) method
// Position of æ in the string aeble: -1
Puede utilizar algunas de las sobrecargas del método Array.Sort para ordenar matrices basándose en la referencia cultural actual. En el ejemplo siguiente se crea una matriz de tres cadenas. En primer lugar, se establece la propiedad System.Threading.Thread.CurrentThread.CurrentCulture en en-US y se llama al método Array.Sort(Array). El criterio de ordenación resultante se basa en las convenciones de ordenación de la referencia cultural Inglés (Estados Unidos). A continuación, el ejemplo establece la propiedad System.Threading.Thread.CurrentThread.CurrentCulture en da-DK y llama de nuevo al método Array.Sort. Observe que el criterio de ordenación resultante difiere del resultado de en-US porque usa las convenciones de ordenación correspondientes a la referencia cultural Danés (Dinamarca).
Imports System.Globalization
Imports System.IO
Imports System.Threading
Public Class TextToFile
Public Shared Sub Main()
' Creates and initializes a new array to store
' these date/time objects.
Dim stringArray() As String = { "Apple", "Æble", "Zebra"}
' Displays the values of the array.
Console.WriteLine("The original string array:")
PrintIndexAndValues(stringArray)
' Set the CurrentCulture to "en-US".
Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US")
' Sort the values of the Array.
Array.Sort(stringArray)
' Display the values of the array.
Console.WriteLine("After sorting for the ""en-US"" culture:")
PrintIndexAndValues(stringArray)
' Set the CurrentCulture to "da-DK".
Thread.CurrentThread.CurrentCulture = New CultureInfo("da-DK")
' Sort the values of the Array.
Array.Sort(stringArray)
' Displays the values of the Array.
Console.WriteLine("After sorting for the culture ""da-DK"":")
PrintIndexAndValues(stringArray)
End Sub
Public Shared Sub PrintIndexAndValues(myArray() As String)
For i As Integer = myArray.GetLowerBound(0) To myArray.GetUpperBound(0)
Console.WriteLine("[{0}]: {1}", i, myArray(i))
Next
Console.WriteLine()
End Sub
End Class
' The example displays the following output:
' The original string array:
' [0]: Apple
' [1]: Æble
' [2]: Zebra
'
' After sorting for the "en-US" culture:
' [0]: Æble
' [1]: Apple
' [2]: Zebra
'
' After sorting for the culture "da-DK":
' [0]: Apple
' [1]: Zebra
' [2]: Æble
using System;
using System.Globalization;
using System.Threading;
public class ArraySort
{
public static void Main(String[] args)
{
// Create and initialize a new array to store the strings.
string[] stringArray = { "Apple", "Æble", "Zebra"};
// Display the values of the array.
Console.WriteLine( "The original string array:");
PrintIndexAndValues(stringArray);
// Set the CurrentCulture to "en-US".
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
// Sort the values of the array.
Array.Sort(stringArray);
// Display the values of the array.
Console.WriteLine("After sorting for the culture \"en-US\":");
PrintIndexAndValues(stringArray);
// Set the CurrentCulture to "da-DK".
Thread.CurrentThread.CurrentCulture = new CultureInfo("da-DK");
// Sort the values of the Array.
Array.Sort(stringArray);
// Display the values of the array.
Console.WriteLine("After sorting for the culture \"da-DK\":");
PrintIndexAndValues(stringArray);
}
public static void PrintIndexAndValues(string[] myArray)
{
for (int i = myArray.GetLowerBound(0); i <=
myArray.GetUpperBound(0); i++ )
Console.WriteLine("[{0}]: {1}", i, myArray[i]);
Console.WriteLine();
}
}
// The example displays the following output:
// The original string array:
// [0]: Apple
// [1]: Æble
// [2]: Zebra
//
// After sorting for the "en-US" culture:
// [0]: Æble
// [1]: Apple
// [2]: Zebra
//
// After sorting for the culture "da-DK":
// [0]: Apple
// [1]: Zebra
// [2]: Æble
.NET Framework usa claves de ordenación para admitir operaciones de ordenación que tienen en cuenta la referencia cultural. A cada carácter de una cadena se le otorgan varias categorías de prioridad de ordenación, entre las que se incluyen el orden alfabético, el uso de mayúsculas y minúsculas y los signos diacríticos. Una clave de ordenación sirve como repositorio de estas categorías para una cadena determinada. Por ejemplo, un criterio de ordenación puede contener una cadena de categorías alfabéticas, seguida de una cadena de prioridades de uso de mayúsculas y minúsculas, etc. Para obtener más información sobre las claves de ordenación, vea la página sobre el algoritmo de intercalación del estándar Unicode en Unicode Technical Standard #10: Unicode Collation Algorithm.
En .NET Framework, la clase SortKey asigna cadenas a sus claves de ordenación. Se puede usar el método CompareInfo.GetSortKey para crear una clave de ordenación para la cadena que se especifique. El resultado es una secuencia de bytes que puede variar en función de la propiedad CurrentCulture y del valor especificado para CompareOptions. Por ejemplo, si se especifica el valor CompareOptions.IgnoreCase al crear una clave de ordenación, una operación de comparación de cadenas que utilice la clave de ordenación no distinguirá entre mayúsculas y minúsculas.
Después de crear una clave de ordenación para una cadena, puede pasársela como parámetro a los métodos proporcionados por la clase SortKey. El método SortKey.Compare permite comparar claves de ordenación. Debido a que este método realiza una comparación byte a byte simple, resulta mucho más rápido que el método String.Compare. Si una aplicación realiza un gran número de operaciones de ordenación, se puede mejorar su rendimiento generando y almacenando las claves de ordenación para todas las cadenas que utiliza. Cuando se requiere una ordenación o una comparación, la aplicación puede utilizar las claves de ordenación en lugar de las cadenas.
En el ejemplo de código siguiente se crean claves de ordenación para dos cadenas (str1 y str2) cuando la propiedad CurrentCulture se establece en da-DK. Se comparan las dos cadenas mediante el método SortKey.Compare y se muestra el resultado. El método devuelve un entero negativo si str1 es menor que str2, devuelve 0 (cero) si str1 y str2 son iguales, y devuelve un entero positivo si str1 es mayor que str2. A continuación, el ejemplo establece la propiedad System.Threading.Thread.CurrentThread.CurrentCulture en en-US y crea claves de ordenación nuevas para las mismas cadenas. El ejemplo compara las claves de ordenación y muestra los resultados. Observe que el resultado de la ordenación varía en función del valor de la referencia cultural actual. Aunque el resultado del ejemplo siguiente es idéntico al resultado del ejemplo de la sección Comparar cadenas visto anteriormente en este tema, el método SortKey.Compare es más rápido que el método String.Compare.
Imports System.Globalization
Imports System.Threading
Public Class SortKeySample
Public Shared Sub Main()
Dim str1 As [String] = "Apple"
Dim str2 As [String] = "Æble"
' Set the CurrentCulture to "da-DK".
Dim dk As New CultureInfo("da-DK")
Thread.CurrentThread.CurrentCulture = dk
' Create a culturally sensitive sort key for str1.
Dim sc1 As SortKey = dk.CompareInfo.GetSortKey(str1)
' Create a culturally sensitive sort key for str2.
Dim sc2 As SortKey = dk.CompareInfo.GetSortKey(str2)
' Compare the two sort keys and display the results.
Dim result1 As Integer = SortKey.Compare(sc1, sc2)
Console.WriteLine("When the current culture is ""da-DK"",")
Console.WriteLine("the result of comparing {0} with {1} is: {2}",
str1, str2, result1)
Console.WriteLine()
' Set the CurrentCulture to "en-US".
Dim enus As New CultureInfo("en-US")
Thread.CurrentThread.CurrentCulture = enus
' Create a culturally sensitive sort key for str1.
Dim sc3 As SortKey = enus.CompareInfo.GetSortKey(str1)
' Create a culturally sensitive sort key for str1.
Dim sc4 As SortKey = enus.CompareInfo.GetSortKey(str2)
' Compare the two sort keys and display the results.
Dim result2 As Integer = SortKey.Compare(sc3, sc4)
Console.WriteLine("When the CurrentCulture is ""en-US"",")
Console.WriteLine("the result of comparing {0} with {1} is: {2}",
str1, str2, result2)
End Sub
End Class
' The example displays the following output:
' When the current culture is "da-DK",
' the result of comparing Apple with Æble is: -1
'
' When the CurrentCulture is "en-US",
' the result of comparing Apple with Æble is: 1
using System;
using System.Threading;
using System.Globalization;
public class SortKeySample
{
public static void Main(String[] args)
{
String str1 = "Apple";
String str2 = "Æble";
// Set the CurrentCulture to "da-DK".
CultureInfo dk = new CultureInfo("da-DK");
Thread.CurrentThread.CurrentCulture = dk;
// Create a culturally sensitive sort key for str1.
SortKey sc1 = dk.CompareInfo.GetSortKey(str1);
// Create a culturally sensitive sort key for str2.
SortKey sc2 = dk.CompareInfo.GetSortKey(str2);
// Compare the two sort keys and display the results.
int result1 = SortKey.Compare(sc1, sc2);
Console.WriteLine("When the CurrentCulture is \"da-DK\",");
Console.WriteLine("the result of comparing {0} with {1} is: {2}\n",
str1, str2, result1);
// Set the CurrentCulture to "en-US".
CultureInfo enus = new CultureInfo("en-US");
Thread.CurrentThread.CurrentCulture = enus ;
// Create a culturally sensitive sort key for str1.
SortKey sc3 = enus.CompareInfo.GetSortKey(str1);
// Create a culturally sensitive sort key for str1.
SortKey sc4 = enus.CompareInfo.GetSortKey(str2);
// Compare the two sort keys and display the results.
int result2 = SortKey.Compare(sc3, sc4);
Console.WriteLine("When the CurrentCulture is \"en-US\",");
Console.WriteLine("the result of comparing {0} with {1} is: {2}",
str1, str2, result2);
}
}
// The example displays the following output:
// When the CurrentCulture is "da-DK",
// the result of comparing Apple with Æble is: -1
//
// When the CurrentCulture is "en-US",
// the result of comparing Apple with Æble is: 1
Puede normalizar las cadenas a mayúsculas o minúsculas antes de ordenarlas. Las reglas para la ordenación y el uso de mayúsculas y minúsculas en las cadenas son específicas del idioma, y varían incluso en los idiomas basados en el alfabeto latino. Solo unos pocos idiomas (incluido el inglés) proporcionan un criterio de ordenación que coincide con el orden de los puntos de código (por ejemplo, A [65] va antes de B [66]). Por este motivo, no deben usarse los puntos de código para realizar comparaciones de cadenas y ordenaciones precisas.
.NET Framework admite todas las formas de normalización de Unicode y no exige ni garantiza una forma de normalización determinada. Cada desarrollador es responsable de elegir la normalización adecuada para sus aplicaciones.
Para obtener más información sobre la normalización de cadenas, vea la sección "Normalización" en el tema de la clase String.
Operaciones de cadenas que no distinguen entre referencias culturales