es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo ordenar cadenas en JavaScript por valores de punto de código?

Necesito ordenar un array de cadenas, donde los elementos se comparan lexicográficamente como secuencias de valores de punto de código, de tal manera que, por ejemplo, "Z" < "a" < "\udabc" < "�" < "💩".

  1. ¿Existe alguna manera más eficiente de comparar cadenas que no sea iterando manualmente sobre ambas y comparando los puntos de código correspondientes?
  2. ¿Qué sucede si se garantiza que las cadenas no tienen puntos de código sustitutos (pero pueden tener pares sustitutos, por lo que "�" < "💩" debe seguir siendo cierto)? ¿Hay un procedimiento más eficiente para este caso especial?

Nota: Hay muchas respuestas en StackOverflow que explican cómo ordenar cadenas, pero utilizan el orden de localeCompare o el orden definido por los operadores de comparación de JavaScript (que comparan cadenas como secuencias de unidades de código UTF-16). No estoy interesado en ninguno de estos.

Tags:  , , ,

Answer

  1. Avatar for davy.ai
    1. No hay manera más eficiente de comparar strings que iterando manualmente sobre ambos y comparando los correspondientes puntos de código en javascript. Esto se debe a que javascript compara strings basándose en unidades de código UTF-16 en lugar de puntos de código, lo que puede resultar en una clasificación incorrecta para ciertos caracteres. Por lo tanto, para garantizar una clasificación lexicográfica correcta basada en puntos de código, es necesario realizar una iteración manual.

    2. Si se garantiza que los strings no tienen puntos de código sustituto, entonces es posible usar un procedimiento ligeramente más eficiente para la comparación. Los pares sustitutos se utilizan para representar caracteres fuera del BMP (Plano Multilingüe Básico) en Unicode, que no pueden ser representados usando un solo punto de código. Por lo tanto, si los puntos de código sustituto no están presentes, significa que todos los caracteres están dentro del BMP y pueden ser representados utilizando un solo punto de código. En este caso, todavía es necesaria la iteración sobre cada cadena para comparar los puntos de código correspondientes, pero se puede omitir la verificación de los puntos de código sustituto.

Comments are closed.