Ordenar una lista parece el problema más resuelto en informática, hasta que vuelve el resultado file10 arriba file2, cada nombre en mayúscula agrupado en la parte superior, $5 varado al final de una lista de precios, y "Apple" y "manzana" contados como dos entradas diferentes. Cada uno de ellos es del tipo que hace exactamente lo que le dijeron. El problema es que "orden alfabético" oculta varias reglas diferentes, y elegir la incorrecta produce una lista técnicamente ordenada y prácticamente inútil.
Esta guía explica las reglas de orden que importan para las listas cotidianas: orden de bytes, orden alfabético local, orden natural para números incrustados, orden numérico verdadero y orden de longitud. También cubre cómo los pasos de limpieza como recortar y eliminar duplicados interactúan con la clasificación. Los ejemplos trabajados utilizan el Clasificador de líneas Toolz, y cada salida mostrada es lo que produce su código.
TL;Dr: Para ordenar líneas de texto, pegue un elemento por línea y elija un modo. Alfabético en Toolz Line Sorter es local y natural, por lo que
item2viene antesitem10, e Ignorar caso (activado de forma predeterminada) mantiene "Apple" y "apple" juntos. Ordenes de modo numérico por el número al inicio de cada línea y hunde líneas no numéricas en la parte inferior. Ordenes de modo de longitud por recuento de caracteres. La limpieza se ejecuta antes de ordenar: recortar espacios en blanco, eliminar líneas en blanco y luego eliminar duplicados manteniendo la primera aparición. El clasificador de líneas en línea es gratuito, no hay registro y se actualiza a medida que escribe.
¿qué hace un clasificador de líneas?
Un clasificador de líneas toma un bloque de texto, trata cada línea como un elemento y reorganiza las líneas mediante una regla elegida. La misma herramienta suele limpiar la lista al mismo tiempo: recortar espacios perdidos, eliminar líneas en blanco y eliminar duplicados.
La versión Toolz ofrece cinco modos y cuatro opciones de limpieza:
| Configuración | Lo que hace | Predeterminado |
|---|---|---|
| A a Z | Orden alfabético local con manejo de números naturales | Seleccionado |
| numérico | Órdenes por número con el que comienza cada línea | |
| Longitud | Órdenes por recuento de caracteres, primero el más corto | |
| Reverso | Cambia el orden de las líneas actuales sin ordenar | |
| Mezclar | Orden aleatorio; haga clic nuevamente para reorganizar | |
| Descendiente | Vuelve el resultado de A a Z, Numérico o Longitud | Apagado |
| Eliminar líneas en blanco | Elimina líneas que están vacías o solo espacios en blanco | En |
| Eliminar duplicados | Mantiene la primera aparición de cada línea | Apagado |
| Espacio en blanco de recorte | Elimina espacios y pestañas en ambos extremos de cada línea | Apagado |
| Ignorar caso | Compara líneas en minúsculas para ordenar y duplicar | En |
El panel de salida muestra cuántas líneas salieron y cuántas se eliminaron, para que pueda ver el efecto de las opciones de limpieza de un vistazo.
¿por qué el archivo 10 viene antes que el archivo 2?
Porque una clasificación de texto sin formato compara cadenas de un carácter a la vez, desde la izquierda. file10 y file2 coincide con cuatro personajes, luego el quinto personaje es 1 en uno y 2 en el otro. El personaje 1 ordenamientos antes 2, entonces file10 gana, y la comparación nunca analiza el hecho de que 10 es un número mayor que 2.
La clasificación natural soluciona esto leyendo cada serie de dígitos como un número. El clasificador de líneas Toolz 's modo A a Z hace eso, usando el navegador 's cotejo integrado con comparación numérica activada, la opción descrita para String.prototype.localeComparar en MDN. Las reglas de pedido que se encuentran a continuación provienen del Algoritmo de clasificación Unicode, que es como los navegadores deciden que "é" ordena cerca de "e" en lugar de después de "z".
Aquí está la misma lista de cinco elementos bajo tres reglas:
| Entrada | Orden de bytes (LC_ALL=C sort) |
Orden de personajes, caso plegado | Orden natural (Herramientas A a Z) |
|---|---|---|---|
item10 |
Item1 |
Item1 |
Item1 |
item2 |
item10 |
item10 |
item2 |
Item1 |
item2 |
item2 |
item3 |
item3 |
item3 |
item3 |
item10 |
zebra |
zebra |
zebra |
zebra |
Se pone el pedido de bytes Item1 primero sólo porque una mayúscula I tiene un código más bajo que cualquier letra minúscula. El orden de los caracteres con plegado de mayúsculas fija el capital, pero aún así pone item10 antes de que item2. El orden natural hace que ambos sean correctos.
¿cómo afecta el caso a la clasificación alfabética?
En orden de bytes sin formato, cada letra mayúscula se clasifica antes de cada letra minúscula, por lo que una lista de nombres se puede dividir en dos ejecuciones alfabéticas: primero todas las entradas en mayúscula y luego todas las minúsculas. La clasificación local no hace eso; primero trata las letras como la misma letra y solo usa el caso para romper empates.
La opción Ignorar caso va un paso más allá y compara todo como minúsculas. Cuando dos líneas difieren sólo por caso, se comparan como iguales y el tipo las mantiene en el orden en que aparecieron en la entrada. Eso es importante para los duplicados, que se tratan a continuación.
Ejemplo trabajado con la muestra incorporada
Haga clic en "Cargar muestra" y la entrada es de diez líneas: banana, Apple, cherry, apple, 10, 2, Banana, date, una línea en blanco y grape.
| Ajustes | rendimiento | Recuento mostrado |
|---|---|---|
| Valores predeterminados: de la A a la Z, ignorar caso activado, eliminar líneas en blanco activadas | 2, 10, Apple, apple, banana, Banana, cherry, date, grape |
9 líneas, 1 eliminada |
| Agregar Eliminar duplicados | 2, 10, Apple, banana, cherry, date, grape |
7 líneas, 3 eliminadas |
| Eliminar duplicados, ignorar caso desactivado | 2, 10, apple, Apple, banana, Banana, cherry, date, grape |
9 líneas, 1 eliminada |
| Valores predeterminados más descendentes | grape, date, cherry, Banana, banana, apple, Apple, 10, 2 |
9 líneas, 1 eliminada |
En esa tabla se ven tres detalles. Los números vienen antes que las letras en modo alfabético y 2 precede 10 debido al orden natural. Con caso Ignorar activado, Apple se mantiene por delante de apple porque apareció primero en la entrada. Con el caso Ignorar desactivado, la clasificación del navegador 's coloca la forma minúscula justo delante de la mayúscula, que es el comportamiento habitual en los navegadores en inglés, y ninguna de las líneas cuenta como duplicados porque no son idénticas. Descender es una inversión completa del resultado ascendente, por lo que las líneas empatadas también giran.
Clasificación alfabética versus numérica: ¿cuándo deberías usar cada una?
Utilice el modo alfabético (natural) para texto que contenga números, como nombres de archivos, etiquetas de versiones o direcciones de calles. Utilice el modo numérico cuando cada línea sea un número o comience con uno y desee que las líneas estén ordenadas por valor.
El modo numérico lee el número al inicio de cada línea de la misma manera que JavaScript's parseFloat lo hace. Se salta los espacios iniciales, lee un signo opcional, dígitos, un punto decimal y un exponente, y se detiene en el primer carácter que no puede continuar con un número. Las líneas que no comienzan con un número van al final y mantienen su orden original.
| Línea | Valor utilizado | Nota |
|---|---|---|
42 |
42 | |
-7.5 |
-7,5 | Los valores negativos y decimales funcionan |
1e3 |
1000 | Se lee notación científica |
12 apples |
12 | Texto después de ignorar el número |
1,000 |
1 | La lectura se detiene ante la coma |
$5 |
no un número | Se hunde hasta el fondo |
v2 |
no un número | Se hunde hasta el fondo |
Clasificación $5, 42, 1,000, -7.5, 12 apples, 1e3 en modo numérico da:
-7.5
1,000
12 apples
42
1e3
$5
Hay dos trampas en esa salida. 1,000 ordenado como 1, porque miles de separadores terminan el número. Despírelos primero con buscar y reemplazar si tus datos los utilizan. Y $5 cayó al fondo; elimine los símbolos de moneda antes de clasificar los precios.
Descender en modo numérico invierte todo el resultado, lo que significa que las líneas no numéricas se mueven de abajo hacia arriba. Si solo desea que los números estén en orden descendente, primero limpie las líneas no numéricas.
¿cómo funciona la clasificación por longitud?
El modo de longitud ordena las líneas según la cantidad de caracteres que contienen, primero la más corta o la más larga con Descendiente. Las líneas de igual longitud mantienen su orden de entrada.
El recuento es la longitud de la cadena JavaScript, que cuenta unidades de código UTF-16. Para letras ordinarias, dígitos y caracteres latinos acentuados que equivalen al número de caracteres visibles: café es 4. La mayoría de los emoji y algunos caracteres raros usan dos unidades de código, por lo que ok👍 cuenta como 4, no como 3. Para listas de palabras, nombres o URL, esto rara vez importa.
La clasificación de longitud es útil para detectar valores atípicos: el título del producto inusualmente largo, la entrada truncada o las palabras clave más cortas de una lista.
¿En qué orden se realiza la limpieza y clasificación?
Los pasos siempre se ejecutan en una secuencia fija y el orden explica los resultados más sorprendentes:
- partir la entrada en líneas, aceptando finales de línea de Unix y Windows.
- compensación cada línea, si Trim espacios en blanco está activado.
- Eliminar líneas en blanco, si está activado. Una línea que contiene solo espacios cuenta como en blanco, incluso con Trim desactivado.
- Eliminar duplicados, si está encendido. Se mantiene la primera aparición. Con Ignorar caso activado, las líneas que difieren sólo por el recuento de casos se duplican y la carcasa del primero sobrevive.
- Ordenar, invertir o mezclar lo que queda.
Debido a que el recorte es opcional y está desactivado de forma predeterminada apple y apple (con un espacio final) hay dos líneas diferentes cuando se comparan duplicados, a menos que active Trim. Ésa es la razón más común por la que "eliminar duplicados" pasar parece perder entradas. Las pestañas pegadas en una hoja de cálculo causan el mismo efecto.
Para trabajos duplicados más pesados, como mantener la última ocurrencia o comparar solo una parte de cada línea, el guía de eliminación de líneas duplicadas cubre las opciones con más profundidad.
Inverso versus descendente: ¿cuál es la diferencia?
La inversa invierte el orden actual de las líneas sin ordenar nada. c, a, b se convierte en b, a, c. Primero se clasifican las clases descendentes y luego se voltean, así que c, a, b de la a la z con descendencia se convierte c, b, a.
Utilice Reverse cuando el orden original signifique algo, como un archivo de registro con las entradas más antiguas primero, y desee las más nuevas primero. Utilice Descending cuando desee una lista ordenada de Z a A o de mayor a menor. El botón Descendiente está deshabilitado en los modos Reverso y Aleatorio porque no tiene nada que voltear.
¿es suficiente el shuffle aleatorio?
El shuffle utiliza el algoritmo de Fisher-Yates, que le da a cada orden posible las mismas posibilidades cuando sus números aleatorios son uniformes, y extrae esos números del navegador 's Math.random(). Eso está bien para aleatorizar una lista de lectura, una lista de reproducción o un orden de presentación. No es una fuente criptográfica aleatoria, por lo que es una elección incorrecta para cualquier cosa en la que alguien pueda tener una razón para predecir o disputar el resultado, como un sorteo de premios. Para ellos, un dedicado lista aleatoria es la mejor opción. Haga clic en Mezclar nuevamente para obtener un nuevo pedido.
¿Es seguro ordenar listas confidenciales en línea?
Con esta herramienta, sí. La clasificación y limpieza se realizan del lado del cliente, en JavaScript en la pestaña de su navegador. El texto no se carga ni almacena y la herramienta sigue funcionando con la red apagada una vez que se ha cargado la página. Las listas de direcciones de correo electrónico, nombres de clientes o nombres de host internos nunca salen de su máquina.
El límite de tamaño práctico es la memoria de su navegador ' en lugar de la tapa de un servidor. Decenas de miles de líneas se clasifican instantáneamente en una computadora portátil típica. Los archivos muy grandes, de cientos de megabytes, se manejan mejor en la línea de comando.
¿cuáles son los errores comunes en la clasificación de líneas?
| Síntoma | Causa | Arreglar |
|---|---|---|
file10 arriba file2 en otra herramienta |
Comparación sencilla de caracteres | Utilice la clasificación natural (A a Z aquí) o sort -V |
| Entradas en mayúscula, todas en la parte superior | Orden de bytes | Utilice una clasificación local o ignore el caso |
| Duplicați nu sunt eliminat | Los espacios finales o las pestañas difieren | Active Recortar espacios en blanco |
| "Apple" y "apple" ambos conservados | Ignorar caso está desactivado | Activa Ignorar caso |
1,000 ordenado como 1 |
Miles de separadores terminan el número | Elimine las comas antes de la clasificación numérica |
Precios con $ en la parte inferior |
La línea no comienza con un número | Primero, los símbolos de moneda en franjas |
| La lista numérica descendente comienza con palabras | Las líneas no numéricas se invierten hacia arriba | Primero elimine las líneas no numéricas |
| La salida tiene un "eliminado" más de lo esperado | Una nueva línea final creó una última línea vacía | Esperado; la línea en blanco fue eliminada |
Alternativas a un clasificador de líneas en línea
| herramienta | Cómo ordenar | notas |
|---|---|---|
GNU sort |
sort -f (caso plegable), sort -n (numeric), sort -V (natural), sort -u (unic), sort -r (reverso) |
Scriptable, maneja archivos enormes; ver el Manual de clasificación GNU |
shuf |
shuf list.txt |
Orden aleatorio en la línea de comando |
| Ordenar por longitud en un caparazón | awk '{ print length, $0 }' list.txt | sort -n | cut -d' ' -f2- |
Cuenta bytes o caracteres según la configuración regional |
| Hoja de cálculo | Pegar en una columna, Datos, Ordenar | Bueno cuando las líneas tienen varios campos |
| Editores de código | "Ordenar líneas" comandos en muchos editores | El comportamiento varía según el editor |
| Clasificador de líneas Toolz | Pegar, haga clic en un modo | Vista previa en vivo, limpieza en una sola pasada, del lado del cliente |
tenga en cuenta que sort la salida depende del LC_ALL investigaciones operacionales LANG configuración de configuración regional, por lo que el mismo comando puede dar órdenes diferentes en dos máquinas. Configuración LC_ALL=C fuerza el orden de bytes.
Ordenar una lista, paso a paso
- Abre el clasificador de líneas de texto y pega tu lista, un artículo por línea.
- Elija de la A a la Z para palabras y nombres de archivos, numérico para números o longitud para el recuento de caracteres.
- Active Recortar espacios en blanco si la lista se pegó de un documento o hoja de cálculo.
- Active Eliminar duplicados si desea cada entrada una vez; deje Ignorar caso activado para fusionar diferentes mayúsculas.
- Verifique el recuento de salida y "eliminado" número.
- Haga clic en Copiar.
Si la lista también necesita normalizar su capitalización, el guía del convertidor de mayúsculas y minúsculas explica título, sentencia y otros casos, y el centro de herramientas de texto recopila el resto de utilidades de texto en un solo lugar.



