Udostępnij za pośrednictwem


Klasa SortKey

Ten artykuł zawiera dodatkowe uwagi dotyczące dokumentacji referencyjnej dla tego interfejsu API.

Porównanie z uwzględnieniem kultury dwóch ciągów zależy od każdego znaku w ciągach mających kilka kategorii wag sortowania, w tym skrypt, alfabetyczne, wielkość liter i wagi diakrytyczne. Klucz sortowania służy jako repozytorium tych wag dla określonego ciągu.

Metoda CompareInfo.GetSortKey zwraca wystąpienie SortKey klasy, które odzwierciedla mapowanie znaków w określonym ciągu z uwzględnieniem kultury. Wartość SortKey obiektu to jego kluczowe dane, które są zwracane przez KeyData właściwość . Te kluczowe dane składają się z serii bajtów, które koduje ciąg, reguły sortowania specyficzne dla kultury i opcje porównania określone przez użytkownika. Porównanie przy użyciu kluczy sortowania składa się z bitowego porównania odpowiednich danych klucza w każdym kluczu sortowania. Jeśli na przykład utworzysz klucz sortowania, wywołując GetSortKey(String, CompareOptions) metodę z wartością , operacja porównania ciągów CompareOptions.IgnoreCase, która używa klucza sortowania, jest bez uwzględniania wielkości liter.

Po utworzeniu klucza sortowania dla ciągu należy porównać klucze sortowania, wywołując metodę statyczną SortKey.Compare . Ta metoda wykonuje proste porównanie bajtów po bajtach, więc jest znacznie szybsze niż String.Compare metoda or CompareInfo.Compare .

Uwaga

Tabele wagi sortowania, zestaw plików tekstowych zawierających informacje o wagach znaków używanych w operacjach sortowania i porównywania dla systemów operacyjnych Windows, domyślna tabela elementów sortowania Unicode, tabela wagi sortowania dla systemów Linux i macOS.

Zagadnienia dotyczące wydajności

Podczas porównywania Compare ciągów metody i CompareInfo.Compare dają te same wyniki, ale są przeznaczone dla różnych scenariuszy.

Na wysokim poziomie CompareInfo.Compare metoda generuje klucz sortowania dla każdego ciągu, wykonuje porównanie, a następnie odrzuca klucz sortowania i zwraca wynik porównania. CompareInfo.Compare Jednak metoda faktycznie nie generuje całego klucza sortowania do wykonania porównania. Zamiast tego metoda generuje dane klucza dla każdego elementu tekstowego (czyli znaku podstawowego, pary zastępczej lub łączenia sekwencji znaków) w każdym ciągu. Następnie metoda porównuje dane klucza dla odpowiednich elementów tekstowych. Operacja kończy się natychmiast po ustaleniu ostatecznego wyniku porównania. Obliczane są informacje o kluczu sortowania, ale żaden obiekt nie SortKey jest tworzony. Ta strategia jest ekonomiczna pod względem wydajności, jeśli oba ciągi są porównywane raz, ale staje się kosztowne, jeśli te same ciągi są porównywane wiele razy.

Metoda Compare wymaga wygenerowania SortKey obiektu dla każdego ciągu przed wykonaniem porównania. Ta strategia jest kosztowna pod względem wydajności dla pierwszego porównania ze względu na czas i ilość zainwestowanej pamięci w generowanie SortKey obiektów. Jednak staje się ekonomiczne, jeśli te same klucze sortowania są porównywane wiele razy.

Załóżmy na przykład, że piszesz aplikację, która przeszukuje tabelę bazy danych dla wiersza, w którym kolumna indeksu opartego na ciągu pasuje do określonego ciągu wyszukiwania. Tabela zawiera tysiące wierszy i porównanie ciągu wyszukiwania z indeksem w każdym wierszu zajmie dużo czasu. W związku z tym gdy aplikacja przechowuje wiersz i jego kolumnę indeksu, generuje również i przechowuje klucz sortowania dla indeksu w kolumnie poświęconej poprawie wydajności wyszukiwania. Gdy aplikacja wyszukuje wiersz docelowy, porównuje klucz sortowania ciągu wyszukiwania z kluczem sortowania dla ciągu indeksu, zamiast porównywać ciąg wyszukiwania z ciągiem indeksu.

Zagadnienia dotyczące zabezpieczeń

Metoda CompareInfo.GetSortKey(String, CompareOptions) zwraca SortKey obiekt z wartością na podstawie określonego ciągu i CompareOptions wartości oraz kultury skojarzonej z obiektem bazowym CompareInfo . Jeśli decyzja dotycząca zabezpieczeń zależy od porównania ciągów lub zmiany wielkości liter, należy użyć CompareInfo.GetSortKey(String, CompareOptions) metody niezmiennej kultury, aby upewnić się, że zachowanie operacji jest spójne, niezależnie od ustawień kultury systemu operacyjnego.

Aby uzyskać klucz sortowania, wykonaj następujące czynności:

  1. Pobierz niezmienną kulturę CultureInfo.InvariantCulture z właściwości .

  2. CompareInfo Pobierz obiekt dla niezmiennej kultury z CultureInfo.CompareInfo właściwości .

  3. Wywołaj metodę CompareInfo.GetSortKey(String, CompareOptions) .

Praca z wartością SortKey obiektu jest równoważna wywołaniu metody systemu Windows LCMapString z określoną wartością LCMAP_SORTKEY. Jednak w przypadku SortKey obiektu klucze sortowania dla znaków angielskich poprzedzają klucze sortowania dla znaków koreańskich.

SortKey obiekty mogą być serializowane, ale tylko tak, aby mogły przekraczać AppDomain obiekty. Jeśli aplikacja serializuje SortKey obiekt, aplikacja musi ponownie wygenerować wszystkie klucze sortowania, gdy istnieje nowa wersja platformy .NET.

Aby uzyskać więcej informacji na temat kluczy sortowania, zobacz Unicode Technical Standard #10, "Unicode Collation Algorithm" (Algorytm sortowania Unicode) w witrynie internetowej Unicode Consortium.