SortKey Kelas
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Mewakili hasil pemetaan string ke kunci pengurutannya.
public ref class SortKey sealed
public ref class SortKey
public sealed class SortKey
public class SortKey
[System.Serializable]
public class SortKey
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public class SortKey
type SortKey = class
[<System.Serializable>]
type SortKey = class
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type SortKey = class
Public NotInheritable Class SortKey
Public Class SortKey
- Warisan
-
SortKey
- Atribut
Contoh
Contoh berikut membandingkan string "llama" menggunakan budaya "en-US" dan "es-ES", dan "en-US" dan "es-ES" budaya tradisional.
using System;
using System.Globalization;
public class SamplesSortKey {
public static void Main() {
// Creates a SortKey using the en-US culture.
CompareInfo myComp_enUS = new CultureInfo("en-US",false).CompareInfo;
SortKey mySK1 = myComp_enUS.GetSortKey( "llama" );
// Creates a SortKey using the es-ES culture with international sort.
CompareInfo myComp_esES = new CultureInfo("es-ES",false).CompareInfo;
SortKey mySK2 = myComp_esES.GetSortKey( "llama" );
// Creates a SortKey using the es-ES culture with traditional sort.
CompareInfo myComp_es = new CultureInfo(0x040A,false).CompareInfo;
SortKey mySK3 = myComp_es.GetSortKey( "llama" );
// Compares the en-US SortKey with each of the es-ES SortKey objects.
Console.WriteLine( "Comparing \"llama\" in en-US and in es-ES with international sort : {0}", SortKey.Compare( mySK1, mySK2 ) );
Console.WriteLine( "Comparing \"llama\" in en-US and in es-ES with traditional sort : {0}", SortKey.Compare( mySK1, mySK3 ) );
}
}
/*
This code produces the following output.
Comparing "llama" in en-US and in es-ES with international sort : 0
Comparing "llama" in en-US and in es-ES with traditional sort : -1
*/
Imports System.Globalization
Public Class SamplesSortKey
Public Shared Sub Main()
' Creates a SortKey using the en-US culture.
Dim myComp_enUS As CompareInfo = New CultureInfo("en-US", False).CompareInfo
Dim mySK1 As SortKey = myComp_enUS.GetSortKey("llama")
' Creates a SortKey using the es-ES culture with international sort.
Dim myComp_esES As CompareInfo = New CultureInfo("es-ES", False).CompareInfo
Dim mySK2 As SortKey = myComp_esES.GetSortKey("llama")
' Creates a SortKey using the es-ES culture with traditional sort.
Dim myComp_es As CompareInfo = New CultureInfo(&H40A, False).CompareInfo
Dim mySK3 As SortKey = myComp_es.GetSortKey("llama")
' Compares the en-US SortKey with each of the es-ES SortKey objects.
Console.WriteLine("Comparing ""llama"" in en-US and in es-ES with international sort : {0}", SortKey.Compare(mySK1, mySK2))
Console.WriteLine("Comparing ""llama"" in en-US and in es-ES with traditional sort : {0}", SortKey.Compare(mySK1, mySK3))
End Sub
End Class
'This code produces the following output.
'
'Comparing "llama" in en-US and in es-ES with international sort : 0
'Comparing "llama" in en-US and in es-ES with traditional sort : -1
Contoh berikut menunjukkan bagaimana Anda dapat menggunakan SortKey kelas untuk meningkatkan performa dalam aplikasi yang sangat bergantung pada pengurutan dan pencarian array besar. Contoh membuat array nama yang tidak diurutkan, yang dalam hal ini memiliki 13 elemen. Kemudian menyimpan kunci sortir setiap nama dalam array paralel, yang diteruskannya ke Sort(Array, Array) metode . Hasilnya adalah array yang diurutkan. Contoh kemudian mencari array untuk tiga string. Untuk setiap string pencarian, ia memanggil GetSortKey(String, CompareOptions) metode untuk mengambil kunci pengurutan string, lalu memanggil Array.FindIndex metode untuk mengambil indeks kunci pengurutan tersebut dalam array kunci sortir. Karena array kunci nama dan pengurutan bersifat paralel, indeks yang dikembalikan juga merupakan indeks nama dalam names array.
using System;
using System.Globalization;
public class Example
{
public static void Main()
{
// Define names.
String[] names= { "Adam", "Ignatius", "Batholomew", "Gregory",
"Clement", "Frances", "Harold", "Dalmatius",
"Edgar", "John", "Benedict", "Paul", "George" };
SortKey[] sortKeys = new SortKey[names.Length];
CompareInfo ci = CultureInfo.CurrentCulture.CompareInfo;
for (int ctr = 0; ctr < names.Length; ctr++)
sortKeys[ctr] = ci.GetSortKey(names[ctr], CompareOptions.IgnoreCase);
// Sort array based on value of sort keys.
Array.Sort(names, sortKeys);
Console.WriteLine("Sorted array: ");
foreach (var name in names)
Console.WriteLine(name);
Console.WriteLine();
String[] namesToFind = { "Paul", "PAUL", "Wilberforce" };
Console.WriteLine("Searching an array:");
foreach (var nameToFind in namesToFind) {
SortKey searchKey = ci.GetSortKey(nameToFind, CompareOptions.IgnoreCase);
int index = Array.FindIndex(sortKeys, (x) => x.Equals(searchKey));
if (index >= 0)
Console.WriteLine("{0} found at index {1}: {2}", nameToFind,
index, names[index]);
else
Console.WriteLine("{0} not found", nameToFind);
}
}
}
// The example displays the following output:
// Sorted array:
// Adam
// Batholomew
// Benedict
// Clement
// Dalmatius
// Edgar
// Frances
// George
// Gregory
// Harold
// Ignatius
// John
// Paul
//
// Searching an array:
// Paul found at index 12: Paul
// PAUL found at index 12: Paul
// Wilberforce not found
Imports System.Globalization
Module Example
Public Sub Main()
' Define names.
Dim names() As String = { "Adam", "Ignatius", "Batholomew",
"Gregory", "Clement", "Frances",
"Harold", "Dalmatius", "Edgar",
"John", "Benedict", "Paul", "George" }
Dim sortKeys(names.Length - 1) As SortKey
Dim ci As CompareInfo = CultureInfo.CurrentCulture.CompareInfo
For ctr As Integer = 0 To names.Length - 1
sortKeys(ctr) = ci.GetSortKey(names(ctr), CompareOptions.IgnoreCase)
Next
' Sort array based on value of sort keys.
Array.Sort(names, sortKeys)
Console.WriteLine("Sorted array: ")
For Each name In names
Console.WriteLine(name)
Next
Console.WriteLine()
Dim namesToFind() As String = { "Paul", "PAUL", "Wilberforce" }
Console.WriteLine("Searching an array:")
For Each nameToFind In namesToFind
Dim searchKey As SortKey = ci.GetSortKey(nameToFind, CompareOptions.IgnoreCase)
Dim index As Integer = Array.FindIndex(sortKeys,
Function(x) x.Equals(searchKey))
If index >= 0 Then
Console.WriteLine("{0} found at index {1}: {2}", nameToFind,
index, names(index))
Else
Console.WriteLine("{0} not found", nameToFind)
End If
Next
End Sub
End Module
' The example displays the following output:
' Sorted array:
' Adam
' Batholomew
' Benedict
' Clement
' Dalmatius
' Edgar
' Frances
' George
' Gregory
' Harold
' Ignatius
' John
' Paul
'
' Searching an array:
' Paul found at index 12: Paul
' PAUL found at index 12: Paul
' Wilberforce not found
Keterangan
Perbandingan dua string yang sensitif terhadap budaya bergantung pada setiap karakter dalam string yang memiliki beberapa kategori bobot penyortiran, termasuk bobot naskah, alfabetik, huruf besar-kecil, dan diakritik. Kunci sortir berfungsi sebagai repositori bobot ini untuk string tertentu.
Metode CompareInfo.GetSortKey ini mengembalikan sebuah instans dari SortKey kelas yang mencerminkan pemetaan karakter yang sensitif terhadap budaya dalam string tertentu. Nilai sebuah objek adalah data utama SortKey, yang dikembalikan oleh properti KeyData. Data utama ini terdiri dari serangkaian byte yang mengodekan string, aturan pengurutan khusus budaya, dan opsi perbandingan yang ditentukan pengguna. Perbandingan menggunakan kunci pengurutan terdiri dari perbandingan bitwise dari data kunci yang sesuai di setiap kunci pengurutan. Misalnya, jika Anda membuat kunci pengurutan dengan memanggil metode GetSortKey(String, CompareOptions) dengan nilai CompareOptions.IgnoreCase, operasi perbandingan string yang menggunakan kunci pengurutan tidak peka huruf besar/kecil.
Setelah Anda membuat kunci pengurutan untuk string, Anda membandingkan kunci pengurutan dengan memanggil metode statis SortKey.Compare . Metode ini melakukan perbandingan byte demi byte yang sederhana, sehingga jauh lebih cepat daripada metode String.Compare atau CompareInfo.Compare.
Note
Anda dapat mengunduh Tabel Bobot Pengurutan, sekumpulan file teks yang berisi informasi tentang bobot karakter yang digunakan dalam operasi pengurutan dan perbandingan untuk sistem operasi Windows, Tabel Elemen Pengurutan Unicode Default, tabel bobot pengurutan untuk Linux dan macOS.
Pertimbangan performa
Saat melakukan perbandingan string, Compare metode dan CompareInfo.Compare menghasilkan hasil yang sama, tetapi menargetkan skenario yang berbeda.
Pada tingkat tinggi, CompareInfo.Compare metode menghasilkan kunci pengurutan untuk setiap string, melakukan perbandingan, lalu membuang kunci sortir dan mengembalikan hasil perbandingan. Namun, metode ini CompareInfo.Compare sebenarnya tidak menghasilkan seluruh kunci pengurutan untuk melakukan perbandingan. Sebagai gantinya, metode ini menghasilkan data kunci untuk setiap elemen teks (yaitu, karakter dasar, pasangan pengganti, atau menggabungkan urutan karakter) di setiap string. Metode ini kemudian membandingkan data kunci untuk elemen teks yang sesuai. Operasi berakhir segera setelah hasil akhir perbandingan ditentukan. Informasi kunci yang diurutkan dihitung, dan tidak ada objek SortKey yang dibuat. Strategi ini ekonomis dalam hal performa jika kedua string dibandingkan sekali, tetapi menjadi mahal jika string yang sama dibandingkan berkali-kali.
Metode Compare merupakan pembuatan objek SortKey untuk setiap string sebelum perbandingan dilakukan. Strategi ini mahal dalam hal performa untuk perbandingan pertama karena waktu dan memori yang diinvestasikan untuk menghasilkan SortKey objek. Namun, menjadi lebih ekonomis jika kunci pengurutan yang sama dibandingkan berulang kali.
Misalnya, Anda menulis aplikasi yang mencari tabel database untuk baris di mana kolom indeks berbasis string cocok dengan string pencarian tertentu. Tabel berisi ribuan baris, dan membandingkan string pencarian dengan indeks di setiap baris akan memakan waktu lama. Oleh karena itu, ketika aplikasi menyimpan baris dan kolom indeksnya, aplikasi juga menghasilkan dan menyimpan kunci pengurutan untuk indeks dalam kolom yang didedikasikan untuk meningkatkan performa pencarian. Saat aplikasi mencari baris target, aplikasi membandingkan kunci pengurutan untuk string pencarian dengan kunci pengurutan untuk string indeks, alih-alih membandingkan string pencarian dengan string indeks.
Pertimbangan keamanan
Metode CompareInfo.GetSortKey(String, CompareOptions) mengembalikan objek SortKey dengan nilai berdasarkan string yang ditentukan dan nilai CompareOptions, serta budaya yang terkait dengan objek CompareInfo yang mendasar. Jika keputusan keamanan tergantung pada perbandingan string atau perubahan kasus, Anda harus menggunakan CompareInfo.GetSortKey(String, CompareOptions) metode budaya invarian untuk memastikan bahwa perilaku operasi konsisten, terlepas dari pengaturan budaya sistem operasi.
Gunakan langkah-langkah berikut untuk mendapatkan kunci pengurutan:
Ambil budaya invarian dari properti CultureInfo.InvariantCulture.
Ambil objek CompareInfo untuk budaya invarian dari properti CultureInfo.CompareInfo.
Panggil metode CompareInfo.GetSortKey(String, CompareOptions).
Bekerja dengan nilai SortKey objek setara dengan memanggil metode Windows LCMapString dengan nilai LCMAP_SORTKEY yang ditentukan. Namun, untuk SortKey objek, kunci pengurutan untuk karakter bahasa Inggris mendahului kunci pengurutan untuk karakter Korea.
SortKey objek dapat diserialisasikan, tetapi hanya agar dapat melintasi AppDomain objek. Jika aplikasi menserialisasikan SortKey objek, aplikasi harus meregenerasi semua kunci pengurutan ketika ada versi baru .NET.
Untuk informasi selengkapnya tentang pengurutan kunci, lihat Standar Teknis Unicode #10, "Algoritma Kolase Unicode" di situs web Unicode Consortium.
Properti
| Nama | Deskripsi |
|---|---|
| KeyData |
Mendapatkan array byte yang mewakili objek saat ini SortKey . |
| OriginalString |
Mendapatkan string asli yang digunakan untuk membuat objek saat ini SortKey . |
Metode
| Nama | Deskripsi |
|---|---|
| Compare(SortKey, SortKey) |
Membandingkan dua tombol pengurutan. |
| Equals(Object) |
Menentukan apakah objek yang ditentukan sama dengan objek saat ini SortKey . |
| GetHashCode() |
Berfungsi sebagai fungsi hash untuk objek saat ini SortKey yang cocok untuk algoritma hash dan struktur data seperti tabel hash. |
| GetType() |
Mendapatkan Type instans saat ini. (Diperoleh dari Object) |
| MemberwiseClone() |
Membuat salinan dangkal dari Objectsaat ini. (Diperoleh dari Object) |
| ToString() |
Mengembalikan string yang mewakili objek saat ini SortKey . |