Ordenar líneas de texto

Ordena líneas alfabéticamente con opciones de mayúsculas y trim.

Descripción

Ordenar una lista de texto parece sencillo hasta que te preguntas: ¿va café antes o después de carro? La respuesta depende de las reglas de cotejo del locale, y son más complicadas de lo que parecen. La especificación Unicode incluye el DUCET (Default Unicode Collation Element Table), una tabla de más de 7.000 entradas que define el peso de cada carácter para la ordenación en múltiples idiomas.

El problema práctico surge al ordenar cadenas con tildes o caracteres especiales. La ordenación lexicográfica pura por código Unicode sitúa la é después de la z, lo que no tiene sentido en ningún idioma humano. La solución correcta es usar localeCompare con el locale y las opciones de sensibilidad adecuadas. En la web, la API Intl.Collator, estandarizada por ECMAScript, se encarga de esto: marca la diferencia entre una lista que parece correcta al usuario y una que parece rota.

Los algoritmos de ordenación tienen una historia rica. Bubble sort es el más famoso para fines didácticos y el menos usado en producción. Quicksort, propuesto por Tony Hoare en 1959, dominó décadas con su rendimiento medio de O(n log n). Timsort, creado por Tim Peters en 2002 para Python y adoptado más tarde por Java y el motor V8 de JavaScript, combina merge sort con insertion sort y aprovecha las secuencias ya ordenadas en los datos, una genialidad práctica. La propiedad de estabilidad — que las líneas con el mismo valor mantengan su orden relativo original — importa cuando se ordena por múltiples criterios en pasadas separadas.

Detalle técnico

Ordenación y acentos: el problema que nadie nota hasta que falla

  • Usar el sort() nativo de JavaScript sin localeCompare sitúa la 'é' después de la 'z' porque compara por valores Unicode, no por reglas de idioma. En una lista de productos o nombres en español, el resultado parece completamente roto.
  • Intl.Collator con el locale correcto maneja correctamente las letras acentuadas, la ñ y otros caracteres del español usando las reglas de cotejo definidas por el Unicode CLDR.
  • La sensibilidad a los acentos (sensitivity: 'base' frente a 'accent') determina si 'e' y 'é' se consideran iguales a efectos de comparación o se tratan como letras distintas.
  • La ordenación natural interpreta los números dentro de las cadenas como valores numéricos: item10 va después de item9, no antes. Esto requiere la opción numeric: true en Intl.Collator.

Casos de uso prácticos

  • Alfabetizar listas de nombres, países, ciudades y productos antes de mostrarlos al usuario final o incluirlos en documentos.
  • Ordenar las claves de archivos de traducción (i18n) para facilitar la revisión y evitar duplicados ocultos en archivos YAML o JSON.
  • Organizar los imports en archivos de código de forma consistente, reduciendo el ruido en las revisiones de código.
  • Preparar datos textuales antes de aplicar búsqueda binaria, que requiere que la lista esté ordenada.
  • Ordenar las líneas de un CSV por una columna específica antes de compararlo con otra versión del archivo.

Guía de la herramienta

  • Con qué trabajas Texto dividido en líneas.

  • Qué hace la herramienta Ordena líneas alfabéticamente (A→Z o Z→A), con opciones de mayúsculas y recorte para la clave de ordenación. Orden estable.

  • Por qué usarla Organizar listas, comparar conjuntos visualmente, preparar archivos para diffs más limpios.

Fragmentos de Código

Ordenación con locale en JavaScript
const lineas = text.split('\n').filter(Boolean);
lineas.sort((a, b) =>
  a.localeCompare(b, 'es-ES', { sensitivity: 'variant', numeric: true })
);
const resultado = lineas.join('\n');
Ordenación inversa (Z → A)
lineas.sort((a, b) =>
  b.localeCompare(a, 'es-ES', { sensitivity: 'variant' })
);

Entrada

banana
apple
cherry → apple
banana
cherry

Preguntas frecuentes

¿Para qué sirve esta herramienta?

Funciona por completo en tu navegador: sirve para validar, formatear o convertir datos en el día a día.

¿Se envían mis datos a algún servidor?

El procesamiento es local con JavaScript. No almacenamos lo que pegas en los campos de texto.

¿Puedo usarlo con datos reales en producción?

Úsalo bajo tu responsabilidad. Para secretos (contraseñas, tokens), prefiere entornos controlados y políticas internas. Recuerda de revisar los contenidos generados. Nunca confies ciegamente en cosas que ves en internet.