Vergleichen und Sortieren von Daten für eine bestimmte Kultur
Die alphabetische Reihenfolge und die Konventionen für Reihenfolgen anderer Elemente unterscheiden sich für die verschiedenen Kulturen. Bei der Sortierreihenfolge kann beispielsweise zwischen Groß- und Kleinschreibung unterschieden werden oder nicht. Darüber hinaus kann die Sortierung anhand der Phonetik bzw. der Darstellung der Zeichen erfolgen. In ostasiatischen Sprachen erfolgt die Sortierung anhand der Anzahl der Striche und der Radikale der Ideogramme. Die Reihenfolge kann sich auch wegen der grundlegenden Reihenfolge unterscheiden, die in einer Sprache und Kultur für das Alphabet verwendet wird. Im Schwedischen gibt es beispielsweise das Zeichen Æ, das im Alphabet nach dem Zeichen Z eingeordnet ist. Im Deutschen gibt es dieses Zeichen auch, aber es entspricht bei der Sortierung ae, d. h., es erscheint im Alphabet nach dem A. Eine weltweit einsetzbare Anwendung muss in der Lage sein, Daten auf kultureller Basis zu vergleichen und zu sortieren, um kultur- und sprachspezifische Sortierkonventionen zu unterstützen.
Hinweis
In bestimmten Szenarien ist ein kulturabhängiges Verhalten nicht erwünscht. Weitere Informationen über die Situationen, in denen kulturunabhängige Operationen durchgeführt werden sollten, und die entsprechenden Vorgehensweisen finden Sie unter Kulturunabhängige Zeichenfolgenoperationen.
Vergleichen von Zeichenfolgen
Die CompareInfo-Klasse umfasst mehrere Methoden, die Sie zum Vergleichen von kulturabhängigen Zeichenfolgen verwenden können. Die CultureInfo-Klasse verfügt über eine CultureInfo.CompareInfo-Eigenschaft, bei der es sich um eine Instanz dieser Klasse handelt. Diese Eigenschaft definiert, wie Zeichenfolgen für eine bestimmte Kultur verglichen und sortiert werden. Die String.Compare-Methode verwendet die Informationen in der CultureInfo.CompareInfo-Eigenschaft, um Zeichenfolgen zu vergleichen. Die String.Compare-Methode gibt eine negative Ganzzahl zurück, wenn Zeichenfolge1 kleiner als Zeichenfolge2 ist, sie gibt 0 zurück, wenn Zeichenfolge1 und Zeichenfolge2 gleich sind, und eine positive Ganzzahl, wenn Zeichenfolge1 größer als Zeichenfolge2 ist.
Anhand des folgenden Codebeispiels wird dargestellt, wie Zeichenfolgen in Abhängigkeit davon, welche Kultur zum Ausführen des Vergleichs verwendet wurde, von der String.Compare-Methode unterschiedlich ausgewertet werden können. Zunächst wird für die CurrentCulture die Sprache Dänisch (Dänemark) festgelegt, und die Zeichenfolgen "Apple" und "Æble" werden verglichen. Im Dänischen wird das Zeichen Æ als einzelner Buchstabe betrachtet und im Alphabet nach Z einsortiert. Demnach ist die Zeichenfolge "Æble" in der dänischen Kultur größer als "Apple". Anschließend wird für CurrentCulture die Sprache Englisch (USA) festgelegt, und die Zeichenfolgen "Apple" und "Æble" werden erneut verglichen. In diesem Fall ist die Zeichenfolge "Æble" kleiner als "Apple". Im Englischen wird das Zeichen Æ als Sonderzeichen betrachtet und im Alphabet vor dem Buchstaben A einsortiert.
Imports System
Imports System.Globalization
Imports System.Threading
Imports Microsoft.VisualBasic
Public Class TestClass
Public Shared Sub Main()
Dim str1 As String = "Apple"
Dim str2 As String = "Æble"
' Sets the CurrentCulture to Danish in Denmark.
Thread.CurrentThread.CurrentCulture = New CultureInfo("da-DK")
Dim result1 As Integer = [String].Compare(str1, str2)
Console.WriteLine(ControlChars.Newline + "When the CurrentCulture _
is ""da-DK""," + ControlChars.Newline + " the 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")
Dim result2 As Integer = [String].Compare(str1, str2)
Console.WriteLine(ControlChars.Newline + "When the _
CurrentCulture is""en-US""," + ControlChars.Newline + " _
the result of comparing {0} with {1} is: {2}", str1, _
str2,result2)
End Sub
End Class
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);
}
}
Wenn Sie diesen Code ausführen, wird Folgendes ausgegeben:
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
Weitere Informationen zum Vergleichen von Zeichenfolgen finden Sie unter String-Klasse und Vergleichen von Zeichenfolgen.
Verwenden von alternativen Sortierreihenfolgen
Einige Kulturen unterstützten mehr als eine Sortierreihenfolge. Beispielsweise unterstützt die Kultur "zh-CN" (Chinesisch (China)) die Sortierung nach Aussprache (Standard) sowie die Sortierung nach Anzahl der Striche. Wenn Sie eine CultureInfo mit einem Kulturnamen erstellen (z. B. "zh-CN"), wird die Standardsortierreihenfolge verwendet. Wenn Sie eine andere Sortierreihenfolge angeben möchten, müssen Sie ein CultureInfo-Objekt mit der LCID für die andere Sortierreihenfolge erstellen. Rufen Sie dann ein CompareInfo-Objekt (das in Zeichenfolgenvergleichen verwendet wird) aus CultureInfo.CompareInfo ab. Alternativ können Sie mithilfe der CompareInfo.GetCompareInfo-Methode (Int32) direkt ein CompareInfo-Objekt erstellen und die LCID für die andere Sortierreihenfolge angeben.
Die folgende Tabelle enthält die Kulturen, die unterschiedliche Sortierreihenfolgen unterstützen, sowie die LCIDs für die standardmäßigen und die alternativen Sortierreihenfolgen.
Kulturname | Sprache – Land/Region | Standardsortierreihenfolge und LCID | Alternative Sortierreihenfolge und LCID |
---|---|---|---|
es-ES |
Spanisch – Spanien |
International: 0x00000C0A |
Traditionell: 0x0000040A |
zh-TW |
Chinesisch – Taiwan |
Anzahl der Striche: 0x00000404 |
Bopomofo: 0x00030404 |
zh-CN |
Chinesisch – China |
Aussprache: 0x00000804 |
Anzahl der Striche: 0x00020804 |
zh-HK |
Chinesisch – Hongkong (SAR) |
Anzahl der Striche: 0x00000c04 |
Anzahl der Striche: 0x00020c04 |
zh-SG |
Chinesisch – Singapur |
Aussprache: 0x00001004 |
Anzahl der Striche: 0x00021004 |
zh-MO |
Chinesisch – Macau (SAR) |
Aussprache: 0x00001404 |
Anzahl der Striche: 0x00021404 |
ja-JP |
Japanisch – Japan |
Standard: 0x00000411 |
Unicode: 0x00010411 |
ko-KR |
Koreanisch – Korea |
Standard: 0x00000412 |
Koreanisch Xwansung – Unicode: 0x00010412 |
de-DE |
Deutsch – Deutschland |
Wörterbuch: 0x00000407 |
Telefonbuchsortierung DIN: 0x00010407 |
hu-HU |
Ungarisch – Ungarn |
Standard: 0x0000040e |
Technische Sortierung: 0x0001040e |
ka-GE |
Georgisch – Georgien |
Traditionell: 0x00000437 |
Moderne Sortierung: 0x00010437 |
Suchen von Zeichenfolgen
Sie können die überladene CompareInfo.IndexOf-Methode zum Zurückgeben des nullbasierten Indexes eines Zeichens oder einer untergeordneten Zeichenfolge innerhalb einer angegebenen Zeichenfolge verwenden. Die Methode gibt eine negative Ganzzahl zurück, wenn das Zeichen oder die untergeordnete Zeichenfolge in der angegebenen Zeichenfolge nicht gefunden wird. Bei der Suche nach einem angegebenen Zeichen mit CompareInfo.IndexOf führen die Methodenüberladungen, die einen CompareOptions-Parameter akzeptieren, den Vergleich anders aus, als die Methodenüberladungen, die den CompareOptions-Parameter nicht akzeptieren. Die CompareInfo.IndexOf-Überladungen, die nach einem char (in Visual Basic Char) suchen und keinen Parameter des Typs CompareOptions annehmen, führen eine kulturabhängige Suche aus. Das heißt, wenn es sich bei char um einen Unicode-Wert handelt, der ein zuvor gebildetes Zeichen darstellt (z. B. die Ligatur 'Æ' (\u00C6)), wird dieser in Abhängigkeit von der Kultur möglicherweise als äquivalent mit einer der Instanzen seiner Komponenten in der richtigen Sequenz betrachtet (z. B. "AE" (\u0041\u0045)). Wenn eine ordinale (kulturunabhängige) Suche ausgeführt werden soll, bei der ein char nur dann als äquivalent mit einem anderen char betrachtet wird, wenn die Unicode-Werte übereinstimmen, muss eine der CompareInfo.IndexOf-Überladungen verwendet werden, die einen CompareOptions-Parameter annehmen. Legen Sie für den CompareOptions-Parameter den CompareOptions.Ordinal-Wert fest.
Sie können auch Überladungen der String.IndexOf-Methode verwenden, die nach einem char suchen, um eine ordinale Suche auszuführen. Die Überladungen der String.IndexOf-Methode, die nach einer Zeichenfolge suchen, führen eine kulturabhängige Suche aus.
Im folgenden Codebeispiel wird der von der Kultur abhängige Unterschied zwischen den Ergebnissen dargestellt, die von der CompareInfo.IndexOf(string, char)-Methode zurückgegeben werden. Es wird eine CultureInfo für "da-DK" (Dänisch (Dänemark)) erstellt. Anschließend werden Überladungen der CompareInfo.IndexOf-Methode für eine Suche nach dem Zeichen 'Æ' in den Zeichenfolgen "Æble" und "aeble" verwendet. Bei der Kultur "da-DK" geben die CompareInfo.IndexOf-Methode, die einen CompareOptions.Ordinal-Parameter annimmt, und die CompareInfo.Index-Methode, die keinen CompareOptions.Ordinal-Parameter annimmt, dasselbe Ergebnis zurück. Das Zeichen 'Æ' wird nur als äquivalent mit dem Unicode-Codewert \u00E6 betrachtet.
Imports System
Imports System.Globalization
Imports System.Threading
Imports Microsoft.VisualBasic
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(ControlChars.Newline + "CultureInfo is set to _
{0}", ci.DisplayName)
Console.WriteLine(ControlChars.Newline + "Using _
CompareInfo.IndexOf(string, char) method" + _
ControlChars.Newline + " the result of searching for {0} in the _
string {1} is: {2}", find, str1, result1)
Console.WriteLine(ControlChars.Newline + "Using _
CompareInfo.IndexOf(string, char) method" + _
ControlChars.Newline + " the result of searching for {0} in the _
string {1} is: {2}", find, str2, result2)
Console.WriteLine(ControlChars.Newline + "Using _
CompareInfo.IndexOf(string, char, CompareOptions) method" + _
ControlChars.Newline + " the result of searching for {0} in the _
string {1} is: {2}", find, str1, result3)
Console.WriteLine(ControlChars.Newline + "Using _
CompareInfo.IndexOf(string, char, CompareOptions) method" + _
ControlChars.Newline + " the result of searching for {0} in the _
string {1} is: {2}", find, str2, result4)
End Sub
End Class
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);
}
}
Dieser Code erzeugt die folgende Ausgabe:
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
Wenn Sie CultureInfo ci = new CultureInfo ("da-DK");
durch CultureInfo ci = new CultureInfo ("en-US")
ersetzen, geben die CompareInfo.Index-Methode mit dem CompareOptions.Ordinal-Parameter und die CompareInfo.Index-Methode ohne den CompareOptions.Ordinal-Parameter unterschiedliche Ergebnisse zurück. Der von CompareInfo.IndexOf(string, char) ausgeführte kulturabhängige Vergleich wertet das Zeichen 'Æ' als äquivalent mit den Komponenten "ae" aus. Der ordinale (kulturunabhängige) Vergleich, der von der CompareInfo.IndexOf(string, char, CompareOptions.Ordinal)-Methode ausgeführt wird, betrachtet die Zeichen 'Æ' und "ae" nicht als äquivalent, da ihre Unicode-Codewerte nicht übereinstimmen.
Wenn Sie den Code für die Kultur "en-US" erneut kompilieren und ausführen, wird die folgende Ausgabe erzeugt:
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
Sortieren von Zeichenfolgen
Die Array-Klasse enthält eine überladene Array.Sort-Methode, mit der Sie Arrays anhand der CultureInfo.CurrentCulture-Eigenschaft sortieren können. Im folgenden Beispiel wird ein Array mit drei Zeichenfolgen erstellt. Zunächst wird für CurrentCulture der Wert "en-US" festgelegt, und die Array.Sort-Methode wird aufgerufen. Die sich daraus ergebende Sortierreihenfolge basiert auf den Sortierkonventionen für die Kultur "en-US". Anschließend wird für CurrentCulture der Wert "da-DK" festgelegt und die Array.Sort-Methode wird erneut aufgerufen. Die sich daraus ergebende Sortierreihenfolge unterscheidet sich von den Ergebnissen für "en-US", weil die Sortierkonventionen für die Kultur "da-DK" verwendet werden.
Imports System
Imports System.Threading
Imports System.IO
Imports System.Globalization
Imports Microsoft.VisualBasic
Public Class TextToFile
Public Shared Sub Main()
Dim str1 As [String] = "Apple"
Dim str2 As [String] = "Æble"
Dim str3 As [String] = "Zebra"
' Creates and initializes a new Array to store
' these date/time objects.
Dim stringArray As Array = Array.CreateInstance(GetType([String]), _
3)
stringArray.SetValue(str1, 0)
stringArray.SetValue(str2, 1)
stringArray.SetValue(str3, 2)
' Displays the values of the Array.
Console.WriteLine(ControlChars.Newline + "The Array initially _
contains the following strings:")
PrintIndexAndValues(stringArray)
' Sets the CurrentCulture to "en-US".
Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US")
' Sorts the values of the Array.
Array.Sort(stringArray)
' Displays the values of the Array.
Console.WriteLine(ControlChars.Newline + "After sorting for the _
culture ""en-US"":")
PrintIndexAndValues(stringArray)
' Sets 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(ControlChars.Newline + "After sorting for the _
culture ""da-DK"":")
PrintIndexAndValues(stringArray)
End Sub
Public Shared Sub PrintIndexAndValues(myArray As Array)
Dim i As Integer
For i = myArray.GetLowerBound(0) To myArray.GetUpperBound(0)
Console.WriteLine(ControlChars.Tab + "[{0}]:" + _
ControlChars.Tab + "{1}", i, myArray.GetValue(i))
Next i
End Sub
End Class
using System;
using System.Threading;
using System.Globalization;
public class ArraySort
{
public static void Main(String[] args)
{
String str1 = "Apple";
String str2 = "Æble";
String str3 = "Zebra";
// Creates and initializes a new Array to store the strings.
Array stringArray = Array.CreateInstance( typeof(String), 3 );
stringArray.SetValue(str1, 0 );
stringArray.SetValue(str2, 1 );
stringArray.SetValue(str3, 2 );
// Displays the values of the Array.
Console.WriteLine( "\nThe Array initially contains the following
strings:" );
PrintIndexAndValues(stringArray);
// Sets the CurrentCulture to "en-US".
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
// Sort the values of the Array.
Array.Sort(stringArray);
// Displays the values of the Array.
Console.WriteLine( "\nAfter sorting for the culture \"en-US\":" );
PrintIndexAndValues(stringArray);
// Sets 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( "\nAfter sorting for the culture \"da-DK\":" );
PrintIndexAndValues(stringArray);
}
public static void PrintIndexAndValues(Array myArray)
{
for ( int i = myArray.GetLowerBound(0); i <=
myArray.GetUpperBound(0); i++ )
Console.WriteLine( "\t[{0}]:\t{1}", i, myArray.GetValue( i ) );
}
}
Dieser Code erzeugt die folgende Ausgabe:
The Array initially contains the following strings:
[0]: Apple
[1]: Æble
[2]: Zebra
After sorting for the culture "en-US":
[0]: Æble
[1]: Apple
[2]: Zebra
After sorting for the culture "da-DK":
[0]: Apple
[1]: Zebra
[2]: Æble
Verwenden von Sortierschlüsseln
Sortierschlüssel werden zum Unterstützen von kulturabhängigen Sortierungen verwendet. Anhand des Unicode-Standards werden jedem Zeichen in einer Zeichenfolge mehrere Sortiergewichtungskategorien zugeordnet. Dies umfasst die Gewichtung nach Groß-/Kleinschreibung, alphabetischer Folge und diakritischen Zeichen. Als Repository für diese Gewichtungen für eine bestimmte Zeichenfolge fungiert ein Sortierschlüssel. Ein Sortierschlüssel kann z. B. eine Zeichenfolge mit alphabetischen Gewichtungen enthalten, dann eine Zeichenfolge mit Gewichtungen nach Groß-/Kleinschreibung usw. Weitere Informationen zu Sortierschlüsselkonzepten finden Sie unter "The Unicode Standard" unter www.unicode.org.
In .NET Framework ordnet die SortKey-Klasse Zeichenfolgen den entsprechenden Sortierschlüsseln zu und umgekehrt. Sie können die CompareInfo.GetSortKey-Methode verwenden, um einen Sortierschlüssel für eine von Ihnen angegebene Zeichenfolge zu erstellen. Der Sortierschlüssel für eine angegebene Zeichenfolge ist eine Reihenfolge von Bytes, die sich in Abhängigkeit von der CurrentCulture und der CompareOptions unterscheiden können, die Sie angeben. Wenn Sie beispielsweise beim Erstellen eines Sortierschlüssels IgnoreCase angeben, wird bei einem Zeichenfolgenvergleich mit diesem Sortierschlüssel die Groß-/Kleinschreibung ignoriert.
Nach dem Erstellen eines Sortierschlüssels für eine Zeichenfolge kann dieser als Parameter an Methoden übergeben werden, die von der SortKey-Klasse zur Verfügung gestellt werden. Mit der SortKey.Compare-Methode können Sie Sortierschlüssel vergleichen. SortKey.Compare ist viel schneller als String.Compare, da ein einfacher Byte-pro-Byte-Vergleich durchgeführt wird In sortierintensiven Anwendungen können Sie die Leistung erhöhen, indem Sie für alle von der Anwendung verwendeten Zeichenfolgen Sortierschlüssel generieren und speichern. Wenn eine Sortierung oder ein Vergleich erforderlich ist, können Sie die Sortierschlüssel anstelle der Zeichenfolgen verwenden.
Im folgenden Codebeispiel werden Sortierschlüssel für zwei Zeichenfolgen erstellt, wenn für CurrentCulture "da-DK" festgelegt ist. Die beiden Zeichenfolgen werden mithilfe der SortKey.Compare-Methode verglichen, und das Ergebnis wird angezeigt. Die SortKey.Compare-Methode gibt eine negative Ganzzahl zurück, wenn Zeichenfolge1 kleiner als Zeichenfolge2, Null (0), wenn Zeichenfolge1 und Zeichenfolge2 gleich sind, und eine positive Ganzzahl, wenn Zeichenfolge1 größer als Zeichenfolge2 ist. Anschließend wird für CurrentCulture die Kultur "en-US" festgelegt und die Sortierschlüssel werden für dieselben Zeichenfolgen erstellt. Die Sortierschlüssel für die Zeichenfolgen werden verglichen, und das Ergebnis wird angezeigt. Die Ergebnisse der Sortierung unterscheiden sich in Abhängigkeit von der CurrentCulture. Zwar stimmt das Ergebnis des folgenden Codebeispiels mit dem Ergebnis des Vergleichs dieser Zeichenfolgen unter Vergleichen von Zeichenfolgen weiter oben in diesem Thema überein, die SortKey.Compare-Methode ist jedoch schneller als die String.Compare-Methode.
Imports System
Imports System.Threading
Imports System.Globalization
Imports Microsoft.VisualBasic
Public Class SortKeySample
Public Shared Sub Main()
Dim str1 As [String] = "Apple"
Dim str2 As [String] = "Æble"
' Sets the CurrentCulture to "da-DK".
Dim dk As New CultureInfo("da-DK")
Thread.CurrentThread.CurrentCulture = dk
' Creates 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)
' Compares the two sort keys and display the results.
Dim result1 As Integer = SortKey.Compare(sc1, sc2)
Console.WriteLine(ControlChars.Newline + "When the CurrentCulture _
is ""da-DK""," + ControlChars.Newline + " the result of _
comparing {0} with {1} is: {2}", str1, str2, result1)
' Sets the CurrentCulture to "en-US".
Dim enus As New CultureInfo("en-US")
Thread.CurrentThread.CurrentCulture = enus
' Creates 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)
' Compares the two sort keys and display the results.
Dim result2 As Integer = SortKey.Compare(sc3, sc4)
Console.WriteLine(ControlChars.Newline + "When the CurrentCulture _
is ""en-US""," + ControlChars.Newline + " the result of _
comparing {0} with {1} is: {2}", str1, str2, result2)
End Sub
End Class
using System;
using System.Threading;
using System.Globalization;
public class SortKeySample
{
public static void Main(String[] args)
{
String str1 = "Apple";
String str2 = "Æble";
// Sets the CurrentCulture to "da-DK".
CultureInfo dk = new CultureInfo("da-DK");
Thread.CurrentThread.CurrentCulture = dk;
// Creates 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);
// Compares the two sort keys and display the results.
int result1 = SortKey.Compare(sc1, sc2);
Console.WriteLine("\nWhen the CurrentCulture is \"da-DK\",\nthe
result of comparing {0} with {1} is: {2}", str1, str2,
result1);
// Sets the CurrentCulture to "en-US".
CultureInfo enus = new CultureInfo("en-US");
Thread.CurrentThread.CurrentCulture = enus ;
// Creates 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);
// Compares the two sort keys and display the results.
int result2 = SortKey.Compare(sc3, sc4);
Console.WriteLine("\nWhen the CurrentCulture is \"en-US\",\nthe
result of comparing {0} with {1} is: {2}", str1, str2,
result2);
}
}
Dieser Code erzeugt die folgende Ausgabe:
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
Normalisierung
Sie können die Zeichenfolgen vor dem Sortieren vereinheitlichen, d. h., diese sollten entweder nur in Großschreibung oder nur in Kleinschreibung vorliegen. Die Regeln für die Sortierung von Zeichenfolgen und die Groß- und Kleinschreibung sind sprachspezifisch. Beispielsweise gibt es selbst innerhalb der Sprachen, für die das lateinische Schriftsystem verwendet wird, Unterschiede bezüglich der Zusammensetzungs- und Sortierregeln. Nur in wenigen Sprachen (zu denen u. a. das Englische gehört) stimmt die Sortierreihenfolge mit der Reihenfolge der Codepunkte überein (z. B. A [65] steht vor B [66]).
Codepunkte allein sind daher keine Gewähr für ein fehlerfreies Sortieren oder Vergleichen von Zeichenfolgen. Darüber hinaus erzwingt oder gewährleistet .NET Framework nicht eine bestimmte Form der Vereinheitlichung. Sie müssen die entsprechende Vereinheitlichung in den entwickelten Anwendungen selbst durchführen.
Siehe auch
Referenz
CompareInfo Class
SortKey Class
Konzepte
Kulturunabhängige Zeichenfolgenoperationen