مقارنة البيانات و فرزها لثقافة محددة
الترتيب الأبجدي، و الاصطلاحات لتسلسل العناصر تختلف من ثقافة لأخرى. على سبيل المثال، يمكن أن ترتيب الفرز متحسس لحالة الأحرف أو غير متحسس لحالة الأحرف. يمكن أن يكون مستنداً إلى الصوتيات أو استناداً إلى مظهر الحرف. في اللغات الشرق آسيوية، يتم ترتيب الفرز حسب الخط و جذر الكلمات الرمزية (الإيديوغرامية). كما يختلف الفرز حسب استخدام الترتيب الرئيسي، و اللغة، و الثقافة للأبجدية. على سبيل المثال، اللغة السويدية تحتوي على حرف "Æ" يكون فرزه بعد "Z" في الأبجدية. اللغة الألمانية لديها أيضاً هذا الحرف، ولكن فرزه مثل "ae" بعد "A" في الأبجدية. يجب أن يكون التطبيق world-ready قادراً على مقارنة البيانات و فرزها على أساس "كل ثقافة" ليدعم اصطلاحات الفرز الخاصة بثقافة معينة و خاصة بلغة معينة.
ملاحظة في بعض السيناريوهات، سلوك المتحسس للثقافة يكون غير مستحب. للحصول على مزيد من المعلومات حول وقت و كيفية تنفيذ عمليات غير متحسسة للثقافة, راجع عمليات السلاسل الغير المتحسسة للثقافة.
مقارنة السلاسل
توفر الفئة CompareInfo مجموعة من الأساليب التي يمكنك استخدامها لإجراء مقارنات بين السلاسل متحسسة للثقافة. الفئة CultureInfo تحتوي على خاصية CompareInfo التي هي مثيل من هذه الفئة. هذه الخاصية تقوم بتعريف كيفية مقارنة السلاسل و فرزها لثقافة معينة. يستخدم الأسلوب Compare() المعلومات الموجودة في الخاصية CompareInfo لمقارنة السلاسل. يرجع الأسلوب String.Compare عدد صحيح سالب إذا كان string1 أقل من string2، و صفر إذا كان string1 و string2 متساويين و عدد صحيح موجب إذا كان string1 أكبر من string2.
يوضح مثال التعليمات البرمجية التالي كيف أن سلسلتين يمكن تقييمها بشكل مختلف من قبل الأسلوب String.Compare استناداً إلى الثقافة المستخدمة لإجراء المقارنة. أولاً، يتم تعيين CurrentCulture إلى da-DK للثقافة الدانماركية (الدنمارك) و السلاسل "Apple" و "Æble" يتم مقارنتها . تعامل اللغة الدانمركية الحرف "Æ" كحرف فردي، و تقوم بفرزه بعد "Z" في الأبجدية. لذلك، السلسلة "Æble" أكبر من "Apple" للثقافة الدانماركية. بعد ذلك، يتم تعيين CurrentCulture إلى en-US للثقافة الإنجليزية (الولايات المتحدة) و السلاسل "Apple" و "Æble" تتم مقارنتها مرة أخرى. هذه المرة، السلسلة "Æble" يتم تحديدها لتكون أقل من "Apple". تعامل اللغة الإنجليزية الحرف "Æ" على أنه رمز خاص، و تقوم بفرزه قبل الحرف "A" في الأبجدية.
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);
}
}
في حالة تنفيذ هذه التعليمات البرمجية، يظهر المخرج كما يلي:
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
للحصول على مزيد من المعلومات حول مقارنة السلاسل، راجع مقارنة السلاسل .
استخدام أوامر فرز بديلة
بعض الثقافات تدعم أكثر من ترتيب فرز واحد. على سبيل المثال، الثقافة الصينية (PRC)، التي اسمها zh-CN، تدعم فرز حسب النطق (افتراضي) و فرز حسب عدد ضغطات المفاتيح. عندما يقوم التطبيق الخاص بك بإنشاء كائن CultureInfo باستخدام اسم ثقافة، على سبيل المثال, zh-CN، ترتيب الفرز الافتراضي يتم استخدامه. لتحديد ترتيب الفرز البديل، يجب على التطبيق إنشاء كائن CultureInfo باستخدام المعرف الخاص بترتيب الفرز البديل. ثم، يجب أن يحصل التطبيق على كائن CompareInfo من CompareInfo للاستخدام في مقارنات السلاسل. بدلاً من ذلك، يمكن للتطبيق الخاص بك إنشاء كائن CompareInfo مباشرةً باستخدام GetCompareInfo()، عن طريق تحديد المعرف الخاص بترتيب الفرز البديل.
يسرد الجدول التالي الثقافات التي تدعم ترتيبات الفرز البديلة و المعرّفات الخاصة بترتيبات الفرز الافتراضية و البديلة.
اسم الثقافة |
الثقافة |
اسم الفرز الافتراضي و المعرف |
اسم الفرز البديل و المعرّف |
---|---|---|---|
es-ES |
الأسبانية (أسبانيا) |
دولي: 0x00000C0A |
التقليدي: 0x0000040A |
zh-TW |
الصينية (تايوان) |
عدد مرات ضغط المفاتيح: 0x00000404 |
Bopomofo: 0x00030404 |
zh-CN |
الصينية (PRC) |
النطق: 0x00000804 |
عدد مرات ضغط المفاتيح: 0x00020804 |
zh-HK |
الصينية (هونج كونج SAR) |
عدد مرات ضغط المفاتيح: 0x00000c04 |
عدد مرات ضغط المفاتيح: 0x00020c04 |
zh-SG |
الصينية (سنغافورة) |
النطق: 0x00001004 |
عدد مرات ضغط المفاتيح: 0x00021004 |
zh-MO |
الصينية (ماكاو SAR) |
النطق: 0x00001404 |
عدد مرات ضغط المفاتيح: 0x00021404 |
ja-JP |
اليابانية (اليابان) |
الافتراضية: 0x00000411 |
Unicode: 0x00010411 |
ko-KR |
الكورية (كوريا) |
الافتراضية: 0x00000412 |
الكورية Xwansung - Unicode: 0x00010412 |
de-DE |
الألمانية (ألمانيا) |
القاموس: 0x00000407 |
فرز دفتر الهاتف DIN: 0x00010407 |
hu-HU |
المجرية (المجر) |
الافتراضية: 0x0000040e |
الفرز التقني: 0x0001040e |
ka-GE |
الجورجية (جورجيا) |
التقليدي: 0x00000437 |
الفرز العصري: 0x00010437 |
البحث في السلاسل
يمكن للتطبيق الخاص بك استخدام الأسلوب IndexOf() المحمل بشكل زائد لاسترداد الفهرس صفري الإسناد لحرف أو سلسلة فرعية داخل سلسلة محددة. يسترد الأسلوب عدد صحيح سالب إذا لم يتم العثور على الحرف أو السلسلة الفرعية في السلسلة المحددة. عند البحث عن حرف محدد باستخدام CompareInfo.IndexOf ، يجب أن يأخذ التطبيق في الاعتبار أن التحميلات الزائدة للأسلوب التي تقبل المعامل CompareOptions ، تقوم بإجراء المقارنة بشكل مختلف عن التحميلات الزائدة للأسلوب التي لا يقبل هذا المعامل. التحميلات الزائدة للأسلوب التي تبحث عن نوع حرف و لا تأخذ معامل CompareOptions تقوم بتنفيذ بحث متحسس للثقافة. هذا إذا كانت قيمة Unicode تمثل حرف precomposed، مثل أداة الوصل "Æ" أي (\u00C6) ، قد يتم اعتبارها مساوية لأي حدوث لمكوناتها بالتسلسل الصحيح مثل "AE" أي (\u0041\u0045) ، استناداً إلى الثقافة. لإجراء بحث (غير متحسس للثقافة) ترتيبي، التي يعتبر فيها نوع حرف مساوي لنوع حرف آخر فقط إذا كانت القيم Unicode متطابقة، يجب على التطبيق استخدام أحد التحميلات الزائدة CompareInfo.IndexOf التي تأخذ معامل CompareOptions و تعين المعامل إلى القيمة الترتيبية.
يمكن للتطبيقات الخاصة بك يمكنها أيضاً استخدام التحميلات الزائدة للأسلوب IndexOf() التي تبحث عن حرف لتنفيذ بحث (غير متحسس للثقافة) ترتيبي. لاحظ أن التحميلات الزائدة لهذا الأسلوب التي تبحث عن سلسلة تقوم بتنفيذ بحث متحسس للثقافة.
يوضح مثال التعليمات البرمجية التالي الفرق في النتائج التي يتم استردادها بواسطة الأسلوب IndexOf استناداً إلى الثقافة. يتم إنشاء كائن CultureInfo لـ da-DK للثقافة الدانماركية (الدنمارك). و بعد ذلك، يتم استخدام التحميلات الزائدة للأسلوب CompareInfo.IndexOf للبحث عن الحرف "Æ" في السلاسل "Æble" و "aeble." لاحظ أن، لـ da-DK، الأسلوب CompareInfo.IndexOf الذي يأخذ معامل CompareOptions تم تعيينه إلى Ordinal، و نفس هذا الأسلوب الذي لا يأخذ هذا المعامل يسترد نفس الشيء. الحرف "Æ" يعتبر فقط مكافئ لقيمة Unicode الرمزية \u00E6.
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);
}
}
تنتج هذه التعليمات البرمجية المخرج التالي:
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
إذا قام التطبيق الخاص بك باستبدال CultureInfo ci = new CultureInfo ("da-DK") بـ CultureInfo ci = new CultureInfo ("en-US") ، يسترجع الأسلوب IndexOf() مع تعيين المعامل CompareOptions إلى Ordinal و نفس الأسلوب بدون هذا المعامل نتائج مختلفة. المقارنة المتحسسة للثقافة التي يتم إنشاؤها بواسطة الأسلوب IndexOf تقوم بتقييم الحرف "Æ" كمكافئ لمكوناته "ae". المقارنة (الغير متحسسة للثقافة) الترتيبية التي يتم تنفيذها بواسطة الأسلوب IndexOf لا تقوم باسترداد الحرف "Æ" كمكافئ لـ "ae" لأن قيمها Unicode الرمزية غير مطابقة.
عند إعادة التحويل البرمجي و تنفيذ هذه التعليمات البرمجية لـ en-US، الذي يمثل الإنجليزية (الولايات المتحدة)، يتم إنتاج المخرج التالي:
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
فرز السلاسل
توفر الفئة Array أسلوب Sort() محمل بشكل زائد الذي يسمح للتطبيق الخاص بك بفرز الصفائف استناداً إلى الخاصية CurrentCulture. في المثال التالي، يتم إنشاء صفيف من ثلاث سلاسل. أولاً، يتم تعيين الخاصية CurrentCulture إلى en-US و يتم استدعاء الأسلوب Sort(). ترتيب الفرز الناتج يستند إلى اصطلاحات الفرز للثقافة الإنجليزية (الولايات المتحدة). بعد ذلك، يتم تعيين الخاصية CurrentCulture إلى da-DK و يتم استدعاء الأسلوب Array.Sort مرة أخرى. لاحظ كيف يختلف ترتيب الفرز الناتج عن نتائج الـ en-US بسبب استخدام اصطلاحات الفرز الخاصة بـ da-DK.
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 ) );
}
}
تنتج هذه التعليمات البرمجية المخرج التالي:
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
استخدام مفاتيح الفرز
يتم استخدام مفاتيح الفرز لدعم الفرز المتحسس للثقافة. استناداً إلى معايير Unicode، كل حرف في سلسلة يُعطى عدة فئات من أوزان الفرز بما في ذلك الأوزان الأبجدية، و أوزان الحالة، و التشكيل. مفتاح الفرز يعمل كنسخة مخزونة لهذه الأوزان لسلسلة معينة. على سبيل المثال، قد يحتوي مفتاح الفرز على سلسلة من الأوزان الأبجدية، متبوعة بسلسلة من أوزان الحالة و هكذا. للحصول على معلومات إضافية حول مفاهيم مفتاح الفرز, راجع "معايير Unicode" في الصفحة الرئيسية Unicode.
في .NET Framework، تقوم SortKey الفئة بتعيين السلاسل إلى مفاتيح الفرز الخاصة بها و بالعكس. يمكن للتطبيقات الخاصة بك استخدام الأسلوب GetSortKey() لإنشاء مفتاح فرز للسلسلة التي تحددها. مفتاح الفرز الناتج عن سلسلة محددة هو سلسلة من وحدات البايت التي يمكن أن تختلف حسب القيم CurrentCulture و CompareOptions المحددة. على سبيل المثال، إذا قام التطبيق بتحديد القيمة IgnoreCase عند إنشاء مفتاح فرز، تتجاهل عملية المقارنة بين السلاسل حالة الأحرف باستخدام مفتاح الفرز.
بعد إنشاء مفتاح فرز لسلسلة، يمكن للتطبيق تمريره كمعامل للأساليب التي توفرها الفئة SortKey. يسمح الأسلوب Compare بمقارنة مفاتيح الفرز. لأن هذا الأسلوب يقوم بتنفيذ مقارنة بسيطة بايت-ثم-بايت، يكون استخدامه أسرع بكثير من استخدام Compare(). التطبيقات التي تكون مكثفة الفرز يمكن تحسين أدائها عن طريق إنشاء و تخزين مفاتيح الفرز لكل السلاسل التي يتم استخدامها. عندما تُطلب عملية فرز أو مقارنة، يمكن للتطبيق استخدام مفاتيح الفرز بدلاً من السلاسل.
يقوم مثال التعليمات البرمجية التالي بإنشاء مفاتيح الفرز لاثنين من السلاسل عندما يتم تعيين CurrentCulture إلى da-DK. يقارن بين سلسلتين باستخدام الأسلوب SortKey.Compare و يقوم بعرض النتائج. يرجع الأسلوب عدد صحيح سالب إذا كان string1 أقل من string2، و صفر (0) إذا كان string1 و string2 متساويين و عدد صحيح موجب إذا كان string1 أكبر من string2. بعد ذلك، يتم تعيين الخاصية CurrentCulture إلى en-US و يتم إنشاء مفاتيح الفرز لنفس السلاسل. تتم مقارنة مفاتيح الفرز للسلاسل و يتم عرض النتائج. و لاحظ أن نتائج الفرز تختلف استناداً إلى الإعداد لـ CurrentCulture. على الرغم من أن نتائج مثال التعليمات البرمجية التالي مماثلة لنتائج مقارنة هذه السلاسل في المثال مقارنة السلاسل سابقاً في هذا الموضوع، استخدام الأسلوب SortKey.Compare يكون أسرع من استخدام الأسلوب String.Compare.
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);
}
}
تنتج هذه التعليمات البرمجية المخرج التالي:
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
التسوية
يمكن للتطبيق الخاص بك تسوية السلاسل إما إلى أحرف كبيرة أو أحرف صغيرة قبل الفرز. تكون قواعد فرز السلاسل و بيان الحالة خاصة بلغة معينة. على سبيل المثال، حتى داخل اللغات ذات البرمجة النصية اللاتينية، يوجد قواعد مختلفة للتركيب و الفرز. هناك عدة لغات فقط (بما في ذلك الإنجليزية) الذي يطابق فيها ترتيب الفرز، ترتيب النقاط الرمزية، على سبيل المثال،A [65] يسبق B [66].
يجب ألا تعتمد التطبيقات الخاصة بك على نقاط رمزية لتنفيذ فرز و مقارنات دقيقة بين السلاسل. بالإضافة إلى ذلك، .NET Framework لا يفرض أو يضمن نموذج محدد من التسوية. تعتبر أنت مسؤولاً عن تنفيذ التسوية المناسبة في التطبيقات التي تقوم بتطويرها.
للحصول على مزيد من المعلومات حول تسوية السلاسل، راجع التسوية و الفرز.
راجع أيضًا:
المبادئ
عمليات السلاسل الغير متحسسة للثقافة