Classe SortKey

Questo articolo fornisce osservazioni supplementari alla documentazione di riferimento per questa API.

Un confronto con distinzione delle impostazioni cultura di due stringhe dipende da ogni carattere nelle stringhe con diverse categorie di pesi di ordinamento, tra cui gli script, alfabetici, maiuscole e minuscole e i pesi diacritici. Una chiave di ordinamento funge da repository di questi pesi per una determinata stringa.

Il metodo CompareInfo.GetSortKey restituisce un'istanza della classe SortKey che riflette il mapping dei caratteri dipendente dalle impostazioni cultura in una stringa specificata. Il valore di un SortKey oggetto è costituito dai relativi dati chiave, restituiti dalla KeyData proprietà . Questi dati chiave sono costituiti da una serie di byte che codificano la stringa, le regole di ordinamento specifiche delle impostazioni cultura e le opzioni di confronto specificate dall'utente. Un confronto con le chiavi di ordinamento è costituito da un confronto bit per bit dei dati della chiave corrispondenti in ogni chiave di ordinamento. Ad esempio, se si crea una chiave di ordinamento chiamando il metodo GetSortKey(String, CompareOptions) con un valore di CompareOptions.IgnoreCase, un'operazione di confronto tra stringhe che utilizza la chiave di ordinamento prevede la distinzione tra maiuscole e minuscole.

Dopo aver creato una chiave di ordinamento per una stringa, è possibile confrontare le chiavi di ordinamento chiamando il metodo statico SortKey.Compare. Questo metodo rappresenta una soluzione molto più rapida rispetto a String.Compare o CompareInfo.Compare, poiché esegue un semplice confronto byte per byte.

Nota

È possibile scaricare le tabelle di ordinamento dei pesi, un set di file di testo che contengono informazioni sui pesi dei caratteri usati nelle operazioni di ordinamento e confronto per i sistemi operativi Windows, la tabella degli elementi Delle regole di confronto Unicode predefinite, la tabella dei pesi di ordinamento per Linux e macOS.

Considerazioni sulle prestazioni

Quando si esegue un confronto tra stringhe, i metodi Compare e CompareInfo.Compare restituiscono gli stessi risultati, ma destinati a scenari diversi.

A livello generale, il CompareInfo.Compare metodo genera la chiave di ordinamento per ogni stringa, esegue il confronto e quindi rimuove la chiave di ordinamento e restituisce il risultato del confronto. Tuttavia, il CompareInfo.Compare metodo in realtà non genera un'intera chiave di ordinamento per eseguire il confronto. Genera invece i dati di chiave per ciascun elemento di testo, ovvero carattere di base, coppia di surrogati o sequenza di caratteri di combinazione, in ciascuna stringa. Il metodo confronta quindi i dati chiave per gli elementi di testo corrispondenti. L'operazione termina non appena viene determinato il risultato finale del confronto. Le informazioni sulla chiave di ordinamento vengono calcolate, ma non viene creato alcun SortKey oggetto. Questa strategia è economica in termini di prestazioni se entrambe le stringhe vengono confrontate una volta, ma diventa costoso se le stesse stringhe vengono confrontate più volte.

Il Compare metodo richiede la generazione di un SortKey oggetto per ogni stringa prima di eseguire il confronto. Questa strategia è costosa in termini di prestazioni per il primo confronto a causa del tempo e della memoria investita per generare gli SortKey oggetti. Tuttavia, diventa economico se le stesse chiavi di ordinamento vengono confrontate più volte.

Si supponga, ad esempio, di scrivere un'applicazione che cerca in una tabella di database la riga in cui la colonna di indice basata su stringa corrisponde a una stringa di ricerca specificata. La tabella contiene migliaia di righe e il confronto tra la stringa di ricerca e l'indice in ogni riga richiederà molto tempo. Pertanto, quando l'applicazione archivia una riga e la relativa colonna di indice, genera e archivia anche la chiave di ordinamento per l'indice in una colonna dedicata al miglioramento delle prestazioni di ricerca. Quando l'applicazione cerca una riga di destinazione, confronta la chiave di ordinamento per la stringa di ricerca con la chiave di ordinamento per la stringa di indice, anziché confrontare la stringa di ricerca con la stringa di indice.

Considerazioni sulla sicurezza

Il CompareInfo.GetSortKey(String, CompareOptions) metodo restituisce un SortKey oggetto con il valore basato su una stringa e CompareOptions un valore specificati e le impostazioni cultura associate all'oggetto sottostante CompareInfo . Se una decisione relativa alla sicurezza è basata sul risultato di un confronto di stringhe o di un'operazione di modifica delle lettere maiuscole e minuscole, è necessario utilizzare il metodo CompareInfo.GetSortKey(String, CompareOptions) della lingua inglese per garantire la coerenza del comportamento dell'operazione, indipendentemente dalle impostazioni cultura del sistema operativo.

Utilizzare i passaggi indicati di seguito per ottenere una chiave di ordinamento:

  1. Recuperare la lingua inglese dalla proprietà CultureInfo.InvariantCulture.

  2. Recuperare un oggetto CompareInfo della lingua inglese dalla proprietà CultureInfo.CompareInfo.

  3. Chiamare il metodo CompareInfo.GetSortKey(String, CompareOptions) .

L'utilizzo del valore di un oggetto SortKey equivale alla chiamata al metodo LCMapString di Windows con specificato il valore LCMAP_SORTKEY. Tuttavia, per l'oggetto SortKey , le chiavi di ordinamento per i caratteri inglesi precedono le chiavi di ordinamento per i caratteri coreani.

SortKey gli oggetti possono essere serializzati, ma solo in modo che possano attraversare AppDomain oggetti. Se un'applicazione serializza un SortKey oggetto, l'applicazione deve rigenerare tutte le chiavi di ordinamento quando è presente una nuova versione di .NET.

Per altre informazioni sulle chiavi di ordinamento, vedere Unicode Technical Standard #10, "Unicode Collation Algorithm" nel sito Web Unicode Consortium.