Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo fornece comentários complementares à documentação de referência para esta API.
Uma comparação sensível à cultura de duas cadeias de caracteres depende de cada caractere nas cadeias de caracteres com várias categorias de pesos de classificação, incluindo pesos de script, alfabéticos, maiúsculas e minúsculas e diacríticos. Uma chave de classificação serve como 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 de caracteres sensível à cultura em uma string especificada. O valor de um SortKey objeto são seus dados de chave, que são retornados pela KeyData propriedade. Esses dados principais 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 você criar uma chave de classificação chamando o método GetSortKey(String, CompareOptions) com um valor de CompareOptions.IgnoreCase, uma operação de comparação de cadeia de caracteres que usa a chave de classificação não diferencia maiúsculas de 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 . Esse método executa uma comparação simples byte a byte, portanto, é 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 caractere usados em operações de classificação e comparação para sistemas operacionais Windows, a Tabela de Elementos de Ordenação 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 métodos Compare e CompareInfo.Compare produzem os mesmos resultados, mas eles 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 combinação de sequência de caracteres) em cada cadeia de caracteres. Em seguida, o método compara os dados de chave para os elementos de texto correspondentes. A operação é encerrada assim que o resultado final da comparação é determinado. As informações de chave de classificação são computadas, mas nenhum SortKey objeto é criado. Essa estratégia é econômica em termos de desempenho se ambas as cadeias de caracteres forem comparadas uma vez, mas se tornar caro se as mesmas cadeias de caracteres 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. Essa estratégia é cara em termos de desempenho para a primeira comparação devido ao tempo e à memória investidas para gerar os SortKey objetos. No entanto, ele se tornará 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 caracteres de pesquisa especificada. A tabela contém milhares de linhas e comparar a cadeia de caracteres 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 do í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 da cadeia de caracteres de pesquisa com a chave de classificação da 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 cadeia de caracteres especificada e o 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 caso, você deverá usar o CompareInfo.GetSortKey(String, CompareOptions) método da cultura invariável 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:
Recupere a cultura invariável da propriedade CultureInfo.InvariantCulture.
Recupere um objeto CompareInfo para a cultura invariável da propriedade CultureInfo.CompareInfo.
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 em inglês precedem as chaves de classificação para caracteres coreanos.
SortKey objetos podem ser serializados, mas somente para que possam atravessar objetos AppDomain. Se um aplicativo serializar um SortKey objeto, o aplicativo deverá 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, "Algoritmo de ordenação Unicode" no site do Consórcio Unicode.