Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Anmärkning
Den här artikeln innehåller ytterligare kommentarer till referensdokumentationen för det här API:et.
En kulturkänslig jämförelse av två strängar beror på att varje tecken i strängarna har flera kategorier av sorteringsvikter, inklusive skriftsystem, alfabetiska, versalbruk och diakritiska vikter. En sorteringsnyckel fungerar som lagringsplats för dessa vikter för en viss sträng.
Metoden CompareInfo.GetSortKey returnerar en instans av SortKey klassen som återspeglar den kulturkänsliga mappningen av tecken i en angiven sträng. Värdet för ett SortKey objekt är dess nyckeldata, som returneras av KeyData egenskapen. Dessa nyckeldata består av en serie byte som kodar strängen, kulturspecifika sorteringsregler och användardefinierade jämförelsealternativ. En jämförelse med sorteringsnycklar består av en bitvis jämförelse av motsvarande nyckeldata i varje sorteringsnyckel. Om du till exempel skapar en sorteringsnyckel genom att anropa GetSortKey(String, CompareOptions) metoden med värdet CompareOptions.IgnoreCase är en strängjämförelseåtgärd som använder sorteringsnyckeln skiftlägesokänslig.
När du har skapat en sorteringsnyckel för en sträng jämför du sorteringsnycklar genom att anropa den statiska SortKey.Compare metoden. Den här metoden utför en enkel byte-by-byte-jämförelse, så den är mycket snabbare än String.Compare metoden eller CompareInfo.Compare .
Anmärkning
Du kan ladda ned sorteringsvikttabeller, en uppsättning textfiler som innehåller information om teckenvikterna som används i sorterings- och jämförelseåtgärder för Windows-operativsystem, standardtabellen för Unicode-sorteringselement, sorteringsvikttabellen för Linux och macOS.
Prestandaöverväganden
När du utför en strängjämförelse ger Compare och CompareInfo.Compare-metoderna samma resultat, men de är avsedda för olika scenarier.
På hög nivå CompareInfo.Compare genererar metoden sorteringsnyckeln för varje sträng, utför jämförelsen och tar sedan bort sorteringsnyckeln och returnerar resultatet av jämförelsen. Dock genererar metoden faktiskt inte en fullständig sorteringsnyckel för att utföra jämförelsen. I stället genererar metoden nyckeldata för varje textelement (dvs. bastecken, surrogatpar eller kombination av teckensekvens) i varje sträng. Metoden jämför sedan nyckeldata för motsvarande textelement. Åtgärden avslutas så snart det slutliga resultatet av jämförelsen har fastställts. Sorteringsnyckelinformation beräknas, men inget SortKey objekt skapas. Den här strategin är ekonomisk när det gäller prestanda om båda strängarna jämförs en gång, men blir dyrt om samma strängar jämförs många gånger.
Metoden Compare kräver generering av ett SortKey objekt för varje sträng innan jämförelsen utförs. Den här strategin är dyr när det gäller prestanda för den första jämförelsen på grund av den tid och det minne som investerats för att generera objekten SortKey . Det blir dock ekonomiskt om samma sorteringsnycklar jämförs många gånger.
Anta till exempel att du skriver ett program som söker i en databastabell efter raden där den strängbaserade indexkolumnen matchar en angiven söksträng. Tabellen innehåller tusentals rader, och det tar lång tid att jämföra söksträngen med indexet på varje rad. När programmet lagrar en rad och dess indexkolumn genererar och lagrar det därför även sorteringsnyckeln för indexet i en kolumn som är dedikerad för att förbättra sökprestandan. När programmet söker efter en målrad jämförs sorteringsnyckeln för söksträngen med sorteringsnyckeln för indexsträngen i stället för att jämföra söksträngen med indexsträngen.
Säkerhetsfrågor
Metoden CompareInfo.GetSortKey(String, CompareOptions) returnerar ett SortKey objekt med värdet baserat på en angiven sträng och CompareOptions ett angivet värde samt kulturen som är associerad med det underliggande CompareInfo objektet. Om ett säkerhetsbeslut är beroende av en strängjämförelse eller skiftlägesändring bör du använda CompareInfo.GetSortKey(String, CompareOptions) metoden i den invarianta kulturen för att säkerställa att åtgärdens beteende är konsekvent, oavsett operativsystemets kulturinställningar.
Använd följande steg för att hämta en sorteringsnyckel:
Hämta den invarianta kulturen från egenskapen CultureInfo.InvariantCulture .
Hämta ett CompareInfo objekt för den invarianta kulturen från egenskapen CultureInfo.CompareInfo .
Anropa CompareInfo.GetSortKey(String, CompareOptions) metoden.
Att arbeta med värdet för ett SortKey objekt motsvarar att anropa Windows-metoden LCMapString med det LCMAP_SORTKEY angivna värdet.
SortKey För objektet föregår dock sorteringsnycklarna för engelska tecken sorteringsnycklarna för koreanska tecken.
SortKey objekt kan serialiseras, men bara så att de kan korsa AppDomain objekt. Om ett program serialiserar ett SortKey objekt måste programmet återskapa alla sorteringsnycklar när det finns en ny version av .NET.
Mer information om sorteringsnycklar finns i Unicode Technical Standard #10, "Unicode Collation Algorithm" på Unicode Consortiums webbplats.