Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Classe SortKey

 

Data di pubblicazione: ottobre 2016

Rappresenta il risultato del mapping di una stringa alla chiave di ordinamento.

Spazio dei nomi:   System.Globalization
Assembly:  mscorlib (in mscorlib.dll)

System.Object
  System.Globalization.SortKey

[SerializableAttribute]
[ComVisibleAttribute(true)]
public class SortKey

NomeDescrizione
System_CAPS_pubpropertyKeyData

Ottiene la matrice di byte che rappresenta l'oggetto SortKey oggetto.

System_CAPS_pubpropertyOriginalString

Ottiene la stringa originale utilizzata per creare l'oggetto SortKey oggetto.

NomeDescrizione
System_CAPS_pubmethodSystem_CAPS_staticCompare(SortKey, SortKey)

Confronta due chiavi di ordinamento.

System_CAPS_pubmethodEquals(Object)

Determina se l'oggetto specificato è uguale all'oggetto SortKey corrente.(Esegue l'override di Object.Equals(Object).)

System_CAPS_protmethodFinalize()

Consente a un oggetto di provare a liberare risorse ed eseguire altre operazioni di pulizia prima che l'oggetto stesso venga reclamato dalla procedura di Garbage Collection. (Ereditato da Object.)

System_CAPS_pubmethodGetHashCode()

Funge da funzione hash per l'oggetto SortKey oggetto adatto per algoritmi e strutture di dati, ad esempio una tabella hash di hash.(Esegue l'override di Object.GetHashCode().)

System_CAPS_pubmethodGetType()

Ottiene l'oggetto Type dell'istanza corrente.(Ereditato da Object.)

System_CAPS_protmethodMemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.(Ereditato da Object.)

System_CAPS_pubmethodToString()

Restituisce una stringa che rappresenta l'oggetto SortKey corrente.(Esegue l'override di Object.ToString().)

Un confronto dipendente dalle impostazioni cultura di due stringhe dipende da ogni carattere nelle stringhe con diverse categorie di peso, inclusi script, caratteri alfabetici, maiuscole e minuscole e segni diacritici. Una chiave di ordinamento funge da repository di tali 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 rappresenta i dati chiave, che viene restituiti dalla KeyData proprietà. Dati di questa chiave è costituito da una serie di byte che codificano la stringa, le regole di ordinamento specifiche delle impostazioni cultura e opzioni di confronto specificate dall'utente. Un confronto utilizzando 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.

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

In generale, il CompareInfo.Compare metodo genera la chiave di ordinamento per ogni stringa, esegue il confronto e quindi elimina la chiave di ordinamento e restituisce il risultato del confronto. Tuttavia, il CompareInfo.Compare metodo effettivamente 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 viene quindi confrontato con i dati della chiave per gli elementi di testo corrispondente. L'operazione termina non appena viene determinato il risultato del confronto. Informazioni sulla chiave di ordinamento è calcolate, ma non SortKey viene creato l'oggetto. Questa strategia è conveniente in termini di prestazioni se entrambe le stringhe vengono confrontate una sola volta, ma diventa dispendiosa 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 è dispendiosa in termini di prestazioni per il primo confronto a causa di memoria utilizzati per generare l'ora di SortKey oggetti. Tuttavia, risulta vantaggioso se le stesse chiavi di ordinamento vengono confrontate più volte.

Ad esempio, si supponga di che scrittura un'applicazione che cerca una tabella di database per la riga in cui la colonna di indice basato su stringa corrisponde a una stringa di ricerca specificati. La tabella contiene migliaia di righe e il confronto della stringa di ricerca nell'indice in ogni riga richiederà molto tempo. Pertanto, quando l'applicazione archivia una riga e la relativa colonna di indice, vengono anche generati e archivia la chiave di ordinamento per l'indice in una colonna utilizzata per migliorare le prestazioni di ricerca. Quando l'applicazione per la ricerca per una riga di destinazione, confronta la chiave di ordinamento per la stringa di ricerca per la chiave di ordinamento per la stringa di indice, anziché confrontare la stringa di ricerca alla stringa di indice.

Il CompareInfo.GetSortKey(String, CompareOptions) metodo restituisce un SortKey oggetto con il valore basato su una stringa specificata e CompareOptions valore e le impostazioni cultura associate all'oggetto sottostante CompareInfo oggetto. 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 il SortKey dell'oggetto, le chiavi di ordinamento per i caratteri in lingua inglese precedono le chiavi di ordinamento per i caratteri coreani.

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

Per ulteriori informazioni sulle chiavi di ordinamento, vedere lo Standard tecnico Unicode n. 10, "Algoritmo di confronto Unicode" sul Unicode Consortium website.

Nell'esempio seguente viene confrontata la stringa "llama" utilizzando le impostazioni cultura "en-US" ed "es-ES" e le impostazioni cultura tradizionali "en-US" ed "es-ES".

using System;
using System.Globalization;

public class SamplesSortKey  {

   public static void Main()  {

      // Creates a SortKey using the en-US culture.
      CompareInfo myComp_enUS = new CultureInfo("en-US",false).CompareInfo;
      SortKey mySK1 = myComp_enUS.GetSortKey( "llama" );

      // Creates a SortKey using the es-ES culture with international sort.
      CompareInfo myComp_esES = new CultureInfo("es-ES",false).CompareInfo;
      SortKey mySK2 = myComp_esES.GetSortKey( "llama" );

      // Creates a SortKey using the es-ES culture with traditional sort.
      CompareInfo myComp_es   = new CultureInfo(0x040A,false).CompareInfo;
      SortKey mySK3 = myComp_es.GetSortKey( "llama" );

      // Compares the en-US SortKey with each of the es-ES SortKey objects.
      Console.WriteLine( "Comparing \"llama\" in en-US and in es-ES with international sort : {0}", SortKey.Compare( mySK1, mySK2 ) );
      Console.WriteLine( "Comparing \"llama\" in en-US and in es-ES with traditional sort   : {0}", SortKey.Compare( mySK1, mySK3 ) );

   }

}

/*
This code produces the following output.

Comparing "llama" in en-US and in es-ES with international sort : 0
Comparing "llama" in en-US and in es-ES with traditional sort   : -1
*/

Nell'esempio seguente viene illustrato come utilizzare la classe SortKey per migliorare le prestazioni in un'applicazione basata ampiamente sull'ordinamento e la ricerca di una matrice di grandi dimensioni. Nell'esempio viene creata una matrice non ordinata di nomi, che in questo caso contiene 13 elementi. Viene quindi archiviata la chiave di ordinamento di ogni nome in una matrice parallela, che viene passata al metodo Array.Sort(Array, Array). Il risultato è una matrice ordinata. Nell'esempio viene quindi eseguita la ricerca delle tre stringhe nella matrice. Per ogni stringa di ricerca viene chiamato il metodo CompareInfo.GetSortKey(String, CompareOptions) per recuperare la chiave di ordinamento delle stringhe, quindi il metodo Array.FindIndex<T> per recuperare l'indice di tale chiave di ordinamento nella matrice delle chiavi di ordinamento. Poiché le matrici dei nomi e delle chiave di ordinamento sono parallele, l'indice restituito è anche l'indice del nome nella matrice names.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      // Define names.
      String[] names= { "Adam", "Ignatius", "Batholomew", "Gregory", 
                        "Clement", "Frances", "Harold", "Dalmatius", 
                        "Edgar", "John", "Benedict", "Paul", "George" }; 
      SortKey[] sortKeys = new SortKey[names.Length];
      CompareInfo ci = CultureInfo.CurrentCulture.CompareInfo;

      for (int ctr = 0; ctr < names.Length; ctr++)
         sortKeys[ctr] = ci.GetSortKey(names[ctr], CompareOptions.IgnoreCase);         

      // Sort array based on value of sort keys.
      Array.Sort(names, sortKeys);

      Console.WriteLine("Sorted array: ");
      foreach (var name in names)
         Console.WriteLine(name);

      Console.WriteLine();

      String[] namesToFind = { "Paul", "PAUL", "Wilberforce" };

      Console.WriteLine("Searching an array:");
      foreach (var nameToFind in namesToFind) {
         SortKey searchKey = ci.GetSortKey(nameToFind, CompareOptions.IgnoreCase);
         int index = Array.FindIndex(sortKeys, (x) => x.Equals(searchKey)); 
         if (index >= 0)
            Console.WriteLine("{0} found at index {1}: {2}", nameToFind,
                              index, names[index]);
         else
            Console.WriteLine("{0} not found", nameToFind);
      } 
   }
}
// The example displays the following output:
//       Sorted array:
//       Adam
//       Batholomew
//       Benedict
//       Clement
//       Dalmatius
//       Edgar
//       Frances
//       George
//       Gregory
//       Harold
//       Ignatius
//       John
//       Paul
//       
//       Searching an array:
//       Paul found at index 12: Paul
//       PAUL found at index 12: Paul
//       Wilberforce not found

.NET Framework
Disponibile da 1.1

I membri statici pubblici ( Condiviso in Visual Basic) di questo tipo è thread safe. Non tutti i membri di istanza sono garantiti come thread safe.

Torna all'inizio
Mostra: