Třída SortKey
Tento článek obsahuje doplňující poznámky k referenční dokumentaci pro toto rozhraní API.
Porovnání dvou řetězců citlivých na jazykové verzi závisí na každém znaku v řetězcích s několika kategoriemi třídit váhy, včetně skriptů, abecedních, malých a malých a diakritických vah. Klíč řazení slouží jako úložiště těchto vah pro určitý řetězec.
Metoda CompareInfo.GetSortKey vrátí instanci SortKey třídy, která odráží mapování znaků citlivé na jazykovou verzi v zadaném řetězci. Hodnota objektu SortKey je jeho klíčová data, která je vrácena KeyData vlastností. Tato klíčová data se skládají z řady bajtů, které kódují řetězec, pravidla řazení specifická pro jazykovou verzi a možnosti porovnání zadané uživatelem. Porovnání pomocí klíčů řazení se skládá z bitového porovnání odpovídajících dat klíče v každém klíči řazení. Pokud například vytvoříte klíč řazení voláním GetSortKey(String, CompareOptions) metody s hodnotou CompareOptions.IgnoreCase, operace porovnání řetězců, která používá klíč řazení, nerozlišuje malá a velká písmena.
Po vytvoření klíče řazení pro řetězec porovnáte klíče řazení voláním statické SortKey.Compare metody. Tato metoda provádí jednoduché porovnání bajtů bajtů, takže je mnohem rychlejší než String.Compare metoda nebo CompareInfo.Compare metoda.
Poznámka:
Můžete si stáhnout tabulky hmotnosti řazení, sadu textových souborů, které obsahují informace o váhách znaků používaných při řazení a porovnávání operací pro operační systémy Windows, výchozí tabulka prvků kolace Unicode, tabulka hmotnosti řazení pro Linux a macOS.
Důležité informace o výkonu
Při porovnávání Compare řetězců mají metody CompareInfo.Compare stejné výsledky, ale cílí na různé scénáře.
Na vysoké úrovni CompareInfo.Compare metoda vygeneruje klíč řazení pro každý řetězec, provede porovnání a potom zahodí klíč řazení a vrátí výsledek porovnání. CompareInfo.Compare Metoda ale ve skutečnosti negeneruje celý klíč řazení k provedení porovnání. Místo toho metoda vygeneruje klíčová data pro každý textový prvek (tj. základní znak, náhradní dvojici nebo kombinování sekvence znaků) v každém řetězci. Metoda pak porovná klíčová data pro odpovídající textové prvky. Operace se ukončí, jakmile se určí konečný výsledek porovnání. Informace o klíči řazení se počítají, ale nevytvoří se žádný SortKey objekt. Tato strategie je z hlediska výkonu úsporná, pokud jsou oba řetězce porovnány jednou, ale stává se nákladnou, pokud jsou stejné řetězce porovnávány mnohokrát.
Metoda Compare vyžaduje generování objektu SortKey pro každý řetězec před provedením porovnání. Tato strategie je nákladná z hlediska výkonu při prvním porovnání z důvodu času a paměti investovaného do generování SortKey objektů. Nicméně, stává se ekonomické, pokud jsou stejné klíče řazení porovnávány mnohokrát.
Předpokládejme například, že napíšete aplikaci, která hledá v databázové tabulce řádek, ve kterém sloupec indexu založený na řetězci odpovídá zadanému vyhledávacímu řetězci. Tabulka obsahuje tisíce řádků a porovnání vyhledávacího řetězce s indexem v každém řádku bude trvat dlouhou dobu. Proto když aplikace uloží řádek a sloupec indexu, vygeneruje a uloží klíč řazení pro index ve sloupci vyhrazeném pro zlepšení výkonu vyhledávání. Když aplikace hledá cílový řádek, porovná klíč řazení pro hledaný řetězec s klíčem řazení pro indexový řetězec, místo aby porovnával hledaný řetězec s indexovým řetězcem.
Bezpečnostní aspekty
Metoda CompareInfo.GetSortKey(String, CompareOptions) vrátí SortKey objekt s hodnotou založenou na zadaném řetězci a CompareOptions hodnotě a jazykovou verzi přidruženou k podkladovému CompareInfo objektu. Pokud rozhodnutí o zabezpečení závisí na porovnání řetězců nebo změně případu, měli byste použít CompareInfo.GetSortKey(String, CompareOptions) metodu invariantní jazykové verze, abyste zajistili, že chování operace je konzistentní bez ohledu na nastavení jazykové verze operačního systému.
Pomocí následujícího postupu získejte klíč řazení:
Načtěte z vlastnosti invariantní jazykovou CultureInfo.InvariantCulture verzi.
CompareInfo Načtěte objekt pro invariantní jazykovou verzi z CultureInfo.CompareInfo vlastnosti.
Zavolejte metodu CompareInfo.GetSortKey(String, CompareOptions) .
Práce s hodnotou objektu SortKey je ekvivalentní volání metody Windows LCMapString
se zadanou hodnotou LCMAP_SORTKEY. V případě objektu SortKey však klíče řazení pro anglické znaky předchází klíčům řazení pro korejské znaky.
SortKey objekty lze serializovat, ale pouze tak, aby mohly přecházet AppDomain mezi objekty. Pokud aplikace serializuje objekt, musí aplikace znovu vygenerovat SortKey všechny klíče řazení, pokud existuje nová verze .NET.
Další informace o klíčích řazení naleznete v tématu Unicode Technical Standard #10, "Unicode Collation Algorithm" na webu Unicode Consortium.