SortKey klas

Opmerking

In dit artikel vindt u aanvullende opmerkingen in de referentiedocumentatie voor deze API.

Een cultuurgevoelige vergelijking van twee tekenreeksen is afhankelijk van elk teken in de tekenreeksen met verschillende categorieën sorteercriteria, waaronder script, alfabetisch, hoofdletters en diakritische gewichten. Een sorteersleutel fungeert als de opslagplaats van deze gewichten voor een bepaalde tekenreeks.

De CompareInfo.GetSortKey methode retourneert een instantie van de SortKey klasse die de cultuurgevoelige toewijzing van tekens in een opgegeven tekenreeks weerspiegelt. De waarde van een SortKey object is de belangrijkste gegevens, die worden geretourneerd door de KeyData eigenschap. Deze sleutelgegevens bestaan uit een reeks bytes die de tekenreeks, cultuurspecifieke sorteerregels en door de gebruiker opgegeven vergelijkingsopties coderen. Een vergelijking met behulp van sorteersleutels bestaat uit een bitsgewijze vergelijking van de bijbehorende sleutelgegevens in elke sorteersleutel. Als u bijvoorbeeld een sorteersleutel maakt door de GetSortKey(String, CompareOptions) methode aan te roepen met een waarde van CompareOptions.IgnoreCase, is een tekenreeksvergelijkingsbewerking die gebruikmaakt van de sorteersleutel niet hoofdlettergevoelig.

Nadat u een sorteersleutel voor een tekenreeks hebt gemaakt, vergelijkt u sorteersleutels door de statische SortKey.Compare methode aan te roepen. Met deze methode wordt een eenvoudige byte-bytevergelijking uitgevoerd, dus het is veel sneller dan de String.Compare of CompareInfo.Compare methode.

Opmerking

U kunt de sorteergewichttabellen downloaden, een set tekstbestanden die informatie bevatten over de tekengewichten die worden gebruikt in sorteer- en vergelijkingsbewerkingen voor Windows-besturingssystemen, de standaardtabel Unicode-sorteringselement, de tabel met sorteergewichten voor Linux en macOS.

Prestatie-overwegingen

Wanneer u een tekenreeksvergelijking uitvoert, leveren de Compare en CompareInfo.Compare methoden dezelfde resultaten op, maar richten ze zich op verschillende scenario's.

Op hoofdlijnen genereert de CompareInfo.Compare-methode de sorteersleutel voor elke tekenreeks, voert de vergelijking uit, verwijdert vervolgens de sorteersleutel, en retourneert het resultaat van de vergelijking. De CompareInfo.Compare methode genereert echter geen volledige sorteersleutel om de vergelijking uit te voeren. In plaats daarvan genereert de methode de sleutelgegevens voor elk tekstelement (dat wil weten, basisteken, surrogaatpaar of tekenreeks combineren) in elke tekenreeks. De methode vergelijkt vervolgens de sleutelgegevens voor de bijbehorende tekstelementen. De bewerking wordt beëindigd zodra het uiteindelijke resultaat van de vergelijking wordt bepaald. Sort sleutelinformatie wordt berekend, maar er wordt geen SortKey-object gemaakt. Deze strategie is economisch in termen van prestaties als beide tekenreeksen eenmaal worden vergeleken, maar duur wordt als dezelfde tekenreeksen vaak worden vergeleken.

De Compare methode vereist het genereren van een SortKey object voor elke tekenreeks voordat de vergelijking wordt uitgevoerd. Deze strategie is duur in termen van prestaties voor de eerste vergelijking vanwege de tijd en het geheugen die zijn geïnvesteerd om de SortKey objecten te genereren. Het wordt echter economisch als dezelfde sorteersleutels vaak worden vergeleken.

Stel dat u een toepassing schrijft waarmee een databasetabel wordt doorzocht naar de rij waarin de indexkolom op basis van tekenreeksen overeenkomt met een opgegeven zoekreeks. De tabel bevat duizenden rijen en het vergelijken van de zoekreeks met de index in elke rij duurt lang. Wanneer de toepassing een rij en de bijbehorende indexkolom opslaat, wordt daarom ook de sorteersleutel voor de index gegenereerd en opgeslagen in een kolom die is toegewezen aan het verbeteren van de zoekprestaties. Wanneer de toepassing zoekt naar een doelrij, wordt de sorteersleutel voor de zoekreeks vergeleken met de sorteersleutel voor de indextekenreeks in plaats van de zoekreeks te vergelijken met de indextekenreeks.

Beveiligingsoverwegingen

De CompareInfo.GetSortKey(String, CompareOptions) methode retourneert een SortKey object met de waarde op basis van een opgegeven tekenreeks en CompareOptions waarde en de cultuur die is gekoppeld aan het onderliggende CompareInfo object. Als een beveiligingsbeslissing afhankelijk is van een tekenreeksvergelijking of casewijziging, moet u de CompareInfo.GetSortKey(String, CompareOptions) methode van de invariante cultuur gebruiken om ervoor te zorgen dat het gedrag van de bewerking consistent is, ongeacht de cultuurinstellingen van het besturingssysteem.

Gebruik de volgende stappen om een sorteersleutel te verkrijgen:

  1. Haal de invariante cultuur op uit de CultureInfo.InvariantCulture eigenschap.

  2. Haal een CompareInfo object op voor de invariante cultuur uit de CultureInfo.CompareInfo eigenschap.

  3. Roep de CompareInfo.GetSortKey(String, CompareOptions) methode aan.

Werken met de waarde van een SortKey object is gelijk aan het aanroepen van de Windows-methode LCMapString met de opgegeven LCMAP_SORTKEY waarde. Voor het SortKey object worden echter de sorteersleutels voor Engelse tekens voorafgegaan door de sorteersleutels voor Koreaanse tekens.

SortKey-objecten kunnen worden geserialiseerd, maar alleen zodat ze AppDomain-objecten kunnen overbrengen. Als een toepassing een SortKey object serialiseert, moet de toepassing alle sorteersleutels opnieuw genereren wanneer er een nieuwe versie van .NET is.

Zie Unicode Technical Standard #10, 'Unicode Collation Algorithm' op de Unicode Consortium-website voor meer informatie over sorteersleutels.