Confronto e ordinamento di dati per specifiche impostazioni cultura
L'ordine alfabetico e le convenzioni per la sequenza di elementi varia in base alle impostazioni cultura. L'ordinamento può, ad esempio, tenere conto delle maiuscole o meno oppure basarsi sulla fonetica o sulla grafia dei caratteri. Nelle lingue dell'Estremo Oriente gli ordinamenti vengono disposti in base al tratto e al radicale di ideogrammi. Gli ordinamenti possono variare anche a seconda dell'ordine di base utilizzato dalla lingua e dalle impostazioni cultura per l'alfabeto. La lingua svedese, ad esempio, dispone di un carattere "Æ" che viene ordinato alfabeticamente dopo la lettera Z. Anche nella lingua tedesca esiste questo carattere, ma viene ordinato alfabeticamente come "ae" dopo la lettera A. Un'applicazione internazionale deve essere in grado di confrontare e ordinare i dati in base alle impostazioni cultura, in modo da supportare le convenzioni di ordinamento specifiche delle lingue e delle impostazioni cultura.
Nota In alcuni scenari un comportamento dipendente dalle impostazioni cultura non rappresenta la soluzione appropriata. Per ulteriori informazioni sui casi e sui modi in cui devono essere eseguite operazioni indipendenti dalle impostazioni cultura, vedere Operazioni sulle stringhe indipendenti dalle impostazioni cultura.
Confronto di stringhe
La classe CompareInfo fornisce un insieme di metodi che è possibile utilizzare per eseguire confronti di stringhe dipendenti dalle impostazioni cultura. La classe CultureInfo dispone di una proprietà CompareInfo che rappresenta un'istanza di tale classe. Questa proprietà definisce la modalità di confronto e ordinamento delle stringhe per impostazioni cultura specifiche. Il metodo String.Compare utilizza le informazioni contenute nella proprietà CompareInfo per confrontare le stringhe. Il metodo String.Compare restituisce un numero intero negativo se string1 è minore di string2, zero se string1 e string2 sono uguali, ed un numero intero positivo se string1 è maggiore di string2.
Nell'esempio di codice riportato di seguito viene illustrato come due stringhe possono essere valutate in modo diverso dal metodo String.Compare in base alle impostazioni cultura utilizzate per l'esecuzione del confronto. Innanzitutto, l'oggetto CurrentCulture viene impostato su da-DK per le impostazioni cultura Danese (Danimarca) e viene eseguito il confronto tra le stringhe "Apple" e "Æble". Nella lingua danese il carattere "Æ" viene considerato come una lettera singola e viene ordinato alfabeticamente dopo la lettera Z. Di conseguenza, la stringa "Æble" segue la stringa "Apple" nell'ordine alfabetico delle impostazioni cultura danesi. Successivamente, l'oggetto CurrentCulture viene impostato su en-US per le impostazioni cultura Inglese (Stati Uniti) e viene eseguito nuovamente il confronto tra le stringhe "Apple" e "Æble". La stringa "Æble" viene ordinata prima della stringa "Apple". Nella lingua inglese infatti il carattere "Æ" viene considerato come un simbolo speciale, ordinato alfabeticamente prima della lettera A.
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
Per ulteriori informazioni sul confronto di stringhe, vedere Confronto di stringhe.
Uso di criteri di ordinamento alternativi
In alcune impostazioni cultura vengono supportati più criteri di ordinamento. Nelle impostazioni cultura zh-CN (cinese Repubblica popolare cinese), ad esempio, viene supportato un ordinamento in base alla pronuncia (valore predefinito) e un ordinamento in base al numero di tratti. Quando l'applicazione crea un oggetto CultureInfo utilizzando il nome di determinate impostazioni cultura, ad esempio zh-CN, viene utilizzato il criterio di ordinamento predefinito. Per specificare un criterio di ordinamento alternativo, l'applicazione deve creare un oggetto CultureInfo utilizzando l'identificatore per il criterio di ordinamento alternativo. L'applicazione deve quindi ottenere dall'oggetto CompareInfo un oggetto CompareInfo da utilizzare nell'esecuzione di confronti tra le stringhe. In alternativa, l'applicazione può creare direttamente un oggetto CompareInfo utilizzando il metodo CompareInfo.GetCompareInfo e specificando l'identificatore per l'ordinamento alternativo.
Nella tabella seguente sono elencate le impostazioni cultura che supportano criteri di ordinamento alternativi e identificatori per i criteri di ordinamento predefiniti e alternativi.
Nome delle impostazioni cultura |
Impostazioni cultura |
Identificatore e nome e dell'ordinamento predefinito |
Identificatore e nome e dell'ordinamento alternativo |
---|---|---|---|
es-ES |
Spagnolo (Spagna) |
Internazionale: 0x00000C0A |
Tradizionale: 0x0000040A |
zh-TW |
Cinese (Taiwan) |
Numero tratti: 0x00000404 |
Bopomofo: 0x00030404 |
zh-CN |
Cinese (Repubblica popolare cinese) |
Pronuncia: 0x00000804 |
Numero tratti: 0x00020804 |
zh-HK |
Cinese (Hong Kong R.A.S.) |
Numero tratti: 0x00000c04 |
Numero tratti: 0x00020c04 |
zh-SG |
Cinese (Singapore) |
Pronuncia: 0x00001004 |
Numero tratti: 0x00021004 |
zh-MO |
Cinese (Macao R.A.S.) |
Pronuncia: 0x00001404 |
Numero tratti: 0x00021404 |
ja-JP |
Giapponese (Giappone) |
Valore predefinito: 0x00000411 |
Unicode: 0x00010411 |
ko-KR |
Coreano (Corea) |
Valore predefinito: 0x00000412 |
Korean Xwansung - Unicode: 0x00010412 |
de-DE |
Tedesco (Germania) |
Dizionario: 0x00000407 |
Phone Book Sort DIN: 0x00010407 |
hu-HU |
Ungherese (Ungheria) |
Valore predefinito: 0x0000040e |
Ordinamento tecnico: 0x0001040e |
ka-GE |
Georgiano (Georgia) |
Tradizionale: 0x00000437 |
Ordinamento moderno: 0x00010437 |
Ricerca di stringhe
L'applicazione può utilizzare il metodo di overload CompareInfo.IndexOf per recuperare l'indice in base zero di un carattere o di una sottostringa all'interno di una stringa specificata. Se il carattere o la sottostringa non vengono trovati nella stringa specificata, il metodo recupera un numero intero negativo. Nella ricerca di un carattere specificato utilizzando l'oggetto CompareInfo.IndexOf, l'applicazione deve tenere conto del fatto che gli overload del metodo che accettano un parametro CompareOptions eseguono il confronto in modo diverso rispetto a quelli che non accettano tale parametro. Gli overload del metodo che ricercano un tipo di carattere e non accettano un parametro di tipo CompareOptions eseguono una ricerca dipendente dalle impostazioni cultura. In base alle impostazioni cultura, se un valore Unicode rappresenta un carattere precomposto, ad esempio la legatura "Æ" (\u00C6), potrebbe essere considerato equivalente a qualsiasi occorrenza dei relativi componenti nella sequenza corretta, ad esempio "AE" (\u0041\u0045). Per eseguire una ricerca ordinale (indipendente dalle impostazioni cultura) per la quale un tipo di carattere viene considerato equivalente a un altro soltanto se i valori Unicode coincidono, l'applicazione deve utilizzare uno degli overload CompareInfo.IndexOf che accettano un parametro CompareOptions e lo impostano sul valore Ordinal.
Gli overload del metodo String.IndexOf che ricercano un carattere possono essere utilizzati dall'applicazione per eseguire una ricerca ordinale (indipendente dalle impostazioni cultura). Si noti che la ricerca di una stringa eseguita dagli overload di tale metodo è dipendente dalle impostazioni cultura.
Nell'esempio di codice riportato di seguito vengono illustrati i risultati differenti recuperati dal metodo IndexOf in base alle impostazioni cultura. Viene creato un oggetto CultureInfo per da-DK, per le impostazioni cultura Danese (Danimarca). Successivamente vengono utilizzati gli overload del metodo CompareInfo.IndexOf per eseguire la ricerca del carattere "Æ" nelle stringhe "Æble" e "aeble". Si noti che, per le impostazioni cultura da-DK, lo stesso risultato viene recuperato sia dal metodo CompareInfo.IndexOf che accetta un parametro CompareOptions impostato su Ordinal sia dallo stesso metodo che non accetta tale parametro. Il carattere "Æ" viene considerato equivalente solo al valore di codice Unicode \u00E6.
Imports System.Globalization
Imports System.Threading
Public Class CompareClass
Public Shared Sub Main()
Dim str1 As String = "Æble"
Dim str2 As String = "aeble"
Dim find As Char = "Æ"
' Creates a CultureInfo for Danish in Denmark.
Dim ci As New CultureInfo("da-DK")
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("CultureInfo is set to {0}",
ci.DisplayName)
Console.WriteLine()
Console.WriteLine("Using CompareInfo.IndexOf(string, char) method")
Console.WriteLine("the result of searching for {0} in the string {1} is: {2}",
find, str1, result1)
Console.WriteLine()
Console.WriteLine("Using CompareInfo.IndexOf(string, char) method")
Console.WriteLine("the result of searching for {0} in the string {1} is: {2}",
find, str2, result2)
Console.WriteLine()
Console.WriteLine("Using CompareInfo.IndexOf(string, char, CompareOptions) method")
Console.WriteLine("the result of searching for {0} in the string {1} is: {2}",
find, str1, result3)
Console.WriteLine()
Console.WriteLine("Using CompareInfo.IndexOf(string, char, CompareOptions) method")
Console.WriteLine("the result of searching for {0} in the string {1} is: {2}",
find, str2, result4)
End Sub
End Class
' The example displays the following output:
' CultureInfo is set to Danish (Denmark)
'
' Using CompareInfo.IndexOf(string, char) method
' the result of searching for Æ in the string Æble is: 0
'
' Using CompareInfo.IndexOf(string, char) method
' the result of searching for Æ in the string aeble is: -1
'
' Using CompareInfo.IndexOf(string, char, CompareOptions) method
' the result of searching for Æ in the string Æble is: 0
'
' Using CompareInfo.IndexOf(string, char, CompareOptions) method
' the result of searching for Æ in the string aeble is: -1
using System;
using System.Globalization;
using System.Threading;
public class CompareClass
{
public static void Main()
{
string str1 = "Æble";
string str2 = "aeble";
char find = 'Æ';
// Creates a CultureInfo for Danish in Denmark.
CultureInfo ci= new CultureInfo("da-DK");
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("\nCultureInfo is set to {0} ", ci.DisplayName);
Console.WriteLine("\nUsing CompareInfo.IndexOf(string, char) " +
"method\nthe result of searching for {0} in the string {1} is: {2}",
find, str1, result1);
Console.WriteLine("\nUsing CompareInfo.IndexOf(string, char) " +
"method\nthe result of searching for {0} in the string {1} is: {2}",
find, str2, result2);
Console.WriteLine("\nUsing CompareInfo.IndexOf(string, char, " +
"CompareOptions) method\nthe result of searching for {0} in the " +
"string {1} is: {2}", find, str1, result3);
Console.WriteLine("\nUsing CompareInfo.IndexOf(string, char, " +
"CompareOptions) method\nthe result of searching for {0} in the " +
"string {1} is: {2}", find, str2, result4);
}
}
// The example displays the following output:
// CultureInfo is set to Danish (Denmark)
//
// Using CompareInfo.IndexOf(string, char) method
// the result of searching for Æ in the string Æble is: 0
//
// Using CompareInfo.IndexOf(string, char) method
// the result of searching for Æ in the string aeble is: -1
//
// Using CompareInfo.IndexOf(string, char, CompareOptions) method
// the result of searching for Æ in the string Æble is: 0
//
// Using CompareInfo.IndexOf(string, char, CompareOptions) method
// the result of searching for Æ in the string aeble is: -1
Se l'applicazione sostituisce CultureInfo ci = new CultureInfo ("da-DK") con CultureInfo ci = new CultureInfo ("en-US"), il metodo CompareInfo.IndexOf con il parametro CompareOptions impostato su Ordinal e lo stesso metodo senza tale parametro recuperano risultati diversi. Il confronto dipendente dalle impostazioni cultura eseguito dal metodo CompareInfo.IndexOf valuta il carattere "Æ" come se fosse equivalente ai relativi componenti "ae". Al contrario, il confronto ordinale indipendente dalle impostazioni cultura eseguito dal metodo CompareInfo.IndexOf non recupera il carattere "Æ" come equivalente ad "ae", poiché i relativi valori di codice Unicode non corrispondono.
Quando viene ricompilato ed eseguito il codice per le impostazioni cultura en-US che corrispondono a Inglese (Stati Uniti), viene prodotto l'output seguente:
The CurrentCulture property is set to English (United States)
Using CompareInfo.IndexOf(string, char) method
the result of searching for Æ in the string Æble is: 0
Using CompareInfo.IndexOf(string, char) method
the result of searching for Æ in the string aeble is: 0
Using CompareInfo.IndexOf(string, char, CompareOptions) method
the result of searching for Æ in the string Æble is: 0
Using CompareInfo.IndexOf(string, char, CompareOptions) method
the result of searching for Æ in the string aeble is: -1
Ordinamento di stringhe
La classe Array fornisce un metodo di overload Array.Sort che consente all'applicazione di ordinare le matrici in base alla proprietà CurrentCulture. Nell'esempio seguente viene creata una matrice di tre stringhe. Innanzitutto, la proprietà Thread.CurrentThread.CurrentCulture viene impostata su en-US e viene chiamato il metodo Array.Sort. Il criterio di ordinamento risultante è basato sulle convenzioni di ordinamento delle impostazioni cultura Inglese (Stati Uniti). Successivamente, la proprietà Thread.CurrentThread.CurrentCulture viene impostata su da-DK e viene chiamato nuovamente il metodo Array.Sort. Si noti che il criterio di ordinamento risultante differisce da en-US in quanto vengono utilizzate le convenzioni di ordinamento per le impostazioni cultura da-DK .
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
Uso delle chiavi di ordinamento
Le chiavi di ordinamento vengono utilizzate per supportare gli ordinamenti che dipendono dalla lingua impostata. In base allo standard Unicode, a ciascun carattere in una stringa vengono assegnate più categorie di fattori di ordinamento, inclusi quello alfabetico, la combinazione di maiuscole e minuscole e i segni diacritici. Una chiave di ordinamento funge da repository di questi fattori per una determinata stringa. Una chiave di ordinamento, ad esempio, può contenere una stringa per i fattori alfabetici, seguita da una per i fattori relativi alle combinazioni di maiuscole e minuscole e così via. Per ulteriori informazioni sui concetti relativi alle chiavi di ordinamento, vedere lo standard Unicode alla home page dello standard Unicode (la pagina potrebbe essere in inglese).
In .NET Framework, il mapping delle stringhe alle relative chiavi di ordinamento e viceversa viene eseguito dalla classe SortKey. L'applicazione può utilizzare il metodo CompareInfo.GetSortKey per creare una chiave di ordinamento per una stringa specificata dall'utente. La chiave di ordinamento risultante per una stringa specificata è una sequenza di byte che può variare in base all'oggetto CurrentCulture e al valore CompareOptions specificato. Se, ad esempio, durante la creazione di una chiave di ordinamento l'applicazione specifica il valore IgnoreCase, nell'operazione di confronto di stringhe che utilizza tale chiave la distinzione tra maiuscole e minuscole viene ignorata.
Una volta creata, una chiave di ordinamento per una stringa può essere passata come parametro ai metodi forniti dalla classe SortKey. Il metodo SortKey.Compare consente di eseguire il confronto tra le chiavi di ordinamento. Questo metodo rappresenta una soluzione molto più rapida rispetto a String.Compare, poiché esegue un semplice confronto byte per byte. In applicazioni che richiedono un elevato numero di operazioni di ordinamento, è possibile ottimizzare le prestazioni mediante la generazione e l'archiviazione di chiavi di ordinamento per tutte le stringhe utilizzate. Quando è necessario eseguire un'operazione di ordinamento o confronto, è possibile fare in modo che l'applicazione utilizzi le chiavi di ordinamento anziché le stringhe.
Nell'esempio di codice seguente vengono create chiavi di ordinamento per due stringhe quando l'oggetto CurrentCulture è impostato su da-DK. Le due stringhe vengono confrontate utilizzando il metodo SortKey.Compare e vengono visualizzati i risultati. Il metodo restituisce un numero intero negativo se stringa1 è minore di stringa2, zero (0) se stringa1 e stringa2 sono uguali e un numero intero positivo se stringa1 è maggiore di stringa2. Successivamente, la proprietà Thread.CurrentThread.CurrentCulture viene impostata su en-US e vengono create le chiavi di ordinamento per le stesse stringhe. Le chiavi di ordinamento per le stringhe vengono confrontate e vengono visualizzati i risultati. Si noti che i risultati dell'ordinamento sono diversi a seconda dell'impostazione specificata per CurrentCulture. Sebbene i risultati dell'esempio riportato di seguito siano identici a quelli ottenuti dal confronto di stringhe nell'esempio fornito nel precedente paragrafo Confronto di stringhe di questo argomento, il metodo SortKey.Compare risulta più rapido del metodo 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
Normalizzazione
L'applicazione è in grado di normalizzare le stringhe in maiuscolo o minuscolo prima dell'ordinamento. Le regole per l'ordinamento e le maiuscole/minuscole sono specifiche della lingua. Anche nell'ambito delle lingue basate sull'alfabeto latino, ad esempio, esistono regole di ordinamento e composizione differenti. Solo in alcune lingue, incluso l'inglese, il criterio di ordinamento corrisponde all'ordine dei punti di codice, ad esempio A [65] viene prima di B [66].
L'esecuzione di ordinamenti e confronti di stringhe accurati da parte dell'applicazione non deve essere basata sui punti di codice. Inoltre in .NET Framework non viene imposta o garantita alcuna forma specifica di normalizzazione. L'utente deve scegliere la normalizzazione appropriata nelle applicazioni sviluppate.
Per ulteriori informazioni sulla normalizzazione delle stringhe, vedere Normalizzazione e ordinamento.
Vedere anche
Concetti
Operazioni sulle stringhe indipendenti dalle impostazioni cultura