Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se proporcionan comentarios adicionales a la documentación de referencia de esta API.
Una comparación que distingue la referencia cultural de dos cadenas depende de cada carácter de las cadenas que tengan varias categorías de pesos de ordenación, como scripts, alfabéticos, mayúsculas y minúsculas y pesos diacríticos. Una clave de ordenación actúa como repositorio de estos pesos para una cadena determinada.
El método CompareInfo.GetSortKey devuelve una instancia de la clase SortKey que refleja el mapeo culturalmente sensible de caracteres en una cadena especificada. El valor de un SortKey objeto es sus datos clave, que devuelve la KeyData propiedad . Estos datos clave constan de una serie de bytes que codifican la cadena, las reglas de ordenación específicas de la referencia cultural y las opciones de comparación especificadas por el usuario. Una comparación mediante claves de ordenación consta de una comparación bit a bit de los datos de clave correspondientes en cada clave de ordenación. Por ejemplo, si crea una clave de ordenación llamando al GetSortKey(String, CompareOptions) método con un valor de, una operación de comparación de CompareOptions.IgnoreCasecadenas que usa la clave de ordenación no distingue mayúsculas de minúsculas.
Después de crear una clave de ordenación para una cadena, se comparan las claves de ordenación llamando al método estático SortKey.Compare . Este método realiza una comparación simple de bytes por bytes, por lo que es mucho más rápido que el String.Compare método o CompareInfo.Compare .
Nota:
Puede descargar las tablas de ponderación de ordenación, que son un conjunto de archivos de texto que contienen información sobre los pesos de caracteres utilizados en operaciones de ordenación y comparación para los sistemas operativos Windows, y la tabla de elementos de intercalación Unicode predeterminada, que es la tabla de ponderación de ordenación para Linux y macOS.
Consideraciones sobre el rendimiento
Al realizar una comparación de cadenas, los Compare métodos y CompareInfo.Compare producen los mismos resultados, pero tienen como destino escenarios diferentes.
En un nivel alto, el CompareInfo.Compare método genera la clave de ordenación para cada cadena, realiza la comparación y, a continuación, descarta la clave de ordenación y devuelve el resultado de la comparación. Sin embargo, el CompareInfo.Compare método realmente no genera una clave de ordenación completa para realizar la comparación. En su lugar, el método genera los datos clave para cada elemento de texto (es decir, carácter base, par suplente o secuencia de caracteres combinado) en cada cadena. A continuación, el método compara los datos de clave de los elementos de texto correspondientes. La operación finaliza en cuanto se determina el resultado final de la comparación. Se calcula la información clave de ordenación, pero no se crea ningún SortKey objeto. Esta estrategia es económica en términos de rendimiento si ambas cadenas se comparan una vez, pero se vuelve costosa si se comparan muchas veces las mismas cadenas.
El Compare método requiere la generación de un SortKey objeto para cada cadena antes de realizar la comparación. Esta estrategia es costosa en términos de rendimiento para la primera comparación debido al tiempo y la memoria invertido para generar los SortKey objetos. Sin embargo, resulta económico si se comparan muchas veces las mismas claves de ordenación.
Por ejemplo, supongamos que escribe una aplicación que busca en una tabla de base de datos la fila en la que la columna de índice basada en cadenas coincide con una cadena de búsqueda especificada. La tabla contiene miles de filas y la comparación de la cadena de búsqueda con el índice de cada fila tardará mucho tiempo. Por lo tanto, cuando la aplicación almacena una fila y su columna de índice, también genera y almacena la clave de ordenación del índice en una columna dedicada a mejorar el rendimiento de la búsqueda. Cuando la aplicación busca una fila de destino, compara la clave de ordenación de la cadena de búsqueda con la clave de ordenación de la cadena de índice, en lugar de comparar la cadena de búsqueda con la cadena de índice.
Consideraciones de seguridad
El método CompareInfo.GetSortKey(String, CompareOptions) devuelve un objeto SortKey que tiene un valor determinado por una cadena especificada y un valor CompareOptions, y la referencia cultural asociada al objeto subyacente CompareInfo. Si una decisión de seguridad depende de una comparación de cadenas o un cambio de mayúsculas y minúsculas, debe usar el método CompareInfo.GetSortKey(String, CompareOptions) de la referencia cultural invariable para asegurarse de que el comportamiento de la operación sea coherente, independientemente de la configuración cultural del sistema operativo.
Siga estos pasos para obtener una clave de ordenación:
Recupere la referencia cultural invariable de la propiedad CultureInfo.InvariantCulture.
Recupere un CompareInfo objeto para la referencia cultural invariable de la CultureInfo.CompareInfo propiedad.
Llame al método CompareInfo.GetSortKey(String, CompareOptions).
Trabajar con el valor de un SortKey objeto es equivalente a llamar al método Windows LCMapString
con el valor de LCMAP_SORTKEY especificado. Sin embargo, para el SortKey objeto , las claves de ordenación para caracteres en inglés preceden a las claves de ordenación para caracteres coreanos.
Los objetos SortKey se pueden serializar, pero solo para que puedan cruzar objetos AppDomain. Si una aplicación serializa un SortKey objeto, la aplicación debe volver a generar todas las claves de ordenación cuando haya una nueva versión de .NET.
Para obtener más información sobre la ordenación de claves, vea Estándar técnico Unicode n.º 10, "Algoritmo de intercalación Unicode" en el sitio web del Consorcio Unicode.