SortKey classe

Observação

Este artigo fornece observações complementares à documentação de referência para esta API.

Uma comparação sensível à cultura de duas cadeias de caracteres depende de cada caractere ter várias categorias de pesos de classificação, incluindo pesos de escrita, alfabéticos, de maiúsculas e minúsculas e de diacríticos. Uma chave de classificação serve como o repositório desses pesos para uma cadeia de caracteres específica.

O método CompareInfo.GetSortKey retorna uma instância da classe SortKey que reflete o mapeamento sensível à cultura de caracteres numa string especificada. O valor de um SortKey objeto é os seus dados-chave, que são retornados pela propriedade KeyData. Esses dados de chave consistem em uma série de bytes que codificam a cadeia de caracteres, regras de classificação específicas da cultura e opções de comparação especificadas pelo usuário. Uma comparação usando chaves de classificação consiste em uma comparação bit a bit dos dados de chave correspondentes em cada chave de classificação. Por exemplo, se criar uma chave de ordenação chamando o método GetSortKey(String, CompareOptions) com um valor de CompareOptions.IgnoreCase, uma operação de comparação que usa a chave de ordenação é insensível a maiúsculas e minúsculas.

Depois de criar uma chave de classificação para uma cadeia de caracteres, você compara as chaves de classificação chamando o método estático SortKey.Compare . Este método executa uma comparação simples byte-a-byte, por isso é muito mais rápido do que o método String.Compare ou CompareInfo.Compare.

Observação

Você pode baixar as Tabelas de Peso de Classificação, um conjunto de arquivos de texto que contêm informações sobre os pesos de caracteres usados em operações de classificação e comparação para sistemas operacionais Windows, a Tabela de Elementos de Agrupamento Unicode Padrão, a tabela de peso de classificação para Linux e macOS.

Considerações sobre desempenho

Ao executar uma comparação de cadeia de caracteres, os Compare métodos e CompareInfo.Compare produzem os mesmos resultados, mas visam cenários diferentes.

Em um nível alto, o CompareInfo.Compare método gera a chave de classificação para cada cadeia de caracteres, executa a comparação e, em seguida, descarta a chave de classificação e retorna o resultado da comparação. No entanto, o CompareInfo.Compare método realmente não gera uma chave de classificação inteira para executar a comparação. Em vez disso, o método gera os dados de chave para cada elemento de texto (ou seja, caractere base, par substituto ou sequência de caracteres combinada) em cada cadeia de caracteres. Em seguida, o método compara os dados de chave para os elementos de texto correspondentes. A operação termina assim que o resultado final da comparação é determinado. As informações da chave de classificação são calculadas, mas nenhum SortKey objeto é criado. Essa estratégia é econômica em termos de desempenho se ambas as strings forem comparadas uma vez, mas se torna cara se as mesmas strings forem comparadas muitas vezes.

O Compare método requer a geração de um SortKey objeto para cada cadeia de caracteres antes de executar a comparação. Esta estratégia é cara em termos de desempenho para a primeira comparação devido ao tempo e memória investidos para gerar os SortKey objetos. No entanto, torna-se econômico se as mesmas chaves de classificação forem comparadas muitas vezes.

Por exemplo, suponha que você escreva um aplicativo que pesquisa uma tabela de banco de dados para a linha na qual a coluna de índice baseada em cadeia de caracteres corresponde a uma cadeia de pesquisa especificada. A tabela contém milhares de linhas, e comparar a cadeia de pesquisa com o índice em cada linha levará muito tempo. Portanto, quando o aplicativo armazena uma linha e sua coluna de índice, ele também gera e armazena a chave de classificação para o índice em uma coluna dedicada a melhorar o desempenho da pesquisa. Quando o aplicativo procura uma linha de destino, ele compara a chave de classificação para a cadeia de caracteres de pesquisa com a chave de classificação para a cadeia de caracteres de índice, em vez de comparar a cadeia de caracteres de pesquisa com a cadeia de caracteres de índice.

Considerações de segurança

O método CompareInfo.GetSortKey(String, CompareOptions) retorna um objeto SortKey com o valor baseado em uma string especificada e no valor CompareOptions, e na cultura associada ao objeto subjacente CompareInfo. Se uma decisão de segurança depender de uma comparação de cadeia de caracteres ou alteração de maiúsculas e minúsculas, você deverá usar o CompareInfo.GetSortKey(String, CompareOptions) método da cultura invariante para garantir que o comportamento da operação seja consistente, independentemente das configurações de cultura do sistema operacional.

Use as seguintes etapas para obter uma chave de classificação:

  1. Recupere a cultura invariante da propriedade CultureInfo.InvariantCulture.

  2. Recupere um objeto da cultura invariante da propriedade CompareInfo a partir de CultureInfo.CompareInfo.

  3. Chame o método CompareInfo.GetSortKey(String, CompareOptions).

Trabalhar com o valor de um SortKey objeto é equivalente a chamar o método Windows LCMapString com o valor LCMAP_SORTKEY especificado. No entanto, para o SortKey objeto, as chaves de classificação para caracteres ingleses precedem as chaves de classificação para caracteres coreanos.

SortKey Os objetos podem ser serializados, mas apenas para que possam cruzar AppDomain objetos. Se um aplicativo serializa um SortKey objeto, o aplicativo deve regenerar todas as chaves de classificação quando houver uma nova versão do .NET.

Para obter mais informações sobre chaves de classificação, consulte Unicode Technical Standard #10, "Unicode Collation Algorithm" no site do Unicode Consortium.