Classificar uma lista soa como o problema mais resolvido da computação, até que o resultado volte file10 acima file2, cada nome maiúsculo agrupado no topo, $5 encalhado no fundo de uma lista de preços, e o & quot; Apple" e o & quot; apple" contou como duas entradas diferentes Cada uma dessas é o tipo que faz exactamente o que lhe foi dito O problema é que o & quot; alfabético order" esconde várias regras diferentes, e escolher a errada produz uma lista que é tecnicamente ordenada e praticamente inútil.
Este guia explica as regras de ordenação que importam para listas cotidianas: ordem de bytes, ordem alfabética com reconhecimento de localidade, ordem natural para números incorporados, ordem numérica verdadeira e ordem de comprimento Também cobre como etapas de limpeza como aparar e remover duplicatas interagem com a classificação Os exemplos trabalhados usam o Classificador de linha Toolz, e cada saída mostrada é o que seu código produz.
tl;dr: Para classificar linhas de texto, cole um item por linha e escolha um modo Alfabético no Toolz Line Sorter é consciente de localidade e natural, então
item2vem antesitem10, e Ignorar o caso (ligado por omissão) mantém o & quot; Apple" e o & quot; apple" juntos O modo numérico ordena pelo número no início de cada linha e afunda linhas não numéricas na parte inferior Ordens do modo Comprimento por contagem de caracteres Limpeza é executada antes da classificação: aparar espaços em branco, soltar linhas em branco e, em seguida, remover duplicatas mantendo a primeira ocorrência O classificador linha online é do lado do cliente, gratuito, sem inscrição e atualizações conforme você digita.
O que faz um classificador de linha?
Um classificador de linhas pega um bloco de texto, trata cada linha como um item e reorganiza as linhas por uma regra escolhida A mesma ferramenta geralmente limpa a lista ao mesmo tempo: aparando espaços perdidos, removendo linhas em branco e removendo duplicatas.
A versão Toolz oferece cinco modos e quatro opções de limpeza:
| Configuração | O que faz | Padrão |
|---|---|---|
| A a Z | Ordem alfabética consciente do local com manipulação de números naturais | Selecionado |
| numérico | Ordens pelo número com o qual cada linha começa | |
| Comprimento | Ordens por contagem de caracteres, mais curto primeiro | |
| Reverso | Inverte a ordem da linha atual sem classificar | |
| Embaralhar | Ordem aleatória; clique novamente para reorganizar | |
| Descendente | Vira o resultado de A para Z, Numérico ou Comprimento | Desligado |
| Remover linhas em branco | Solta linhas vazias ou apenas espaços em branco | Em |
| Remover duplicatas | Mantém a primeira ocorrência de cada linha | Desligado |
| Espaço em branco aparar | Remove espaços e abas em ambas as extremidades de cada linha | Desligado |
| Ignorar caso | Compara linhas como minúsculas para classificação e duplicatas | Em |
O painel de saída mostra quantas linhas saíram e quantas foram removidas, para que você possa ver o efeito das opções de limpeza rapidamente.
Por que o arquivo10 vem antes do arquivo2?
Porque uma classificação de texto simples compara strings de um caractere de cada vez, da esquerda. file10 e file2 combine quatro personagens, então o quinto personagem é 1 em um e 2 no outro. O personagem 1 Classifica antes 2, então file10 ganha, e a comparação nunca olha para o fato de que 10 é um número maior que 2.
A classificação natural corrige isso lendo cada série de dígitos como um número. O classificador de linha Toolz & #39; s O modo A a Z faz isso, usando o navegador & #39; s compilação integrada com comparação numérica ativada, a opção descrita para String.prototype.localeCompare em MDN. As regras de ordenação abaixo vêm do Algoritmo de Colação Unicode, que é como os navegadores decidem que o & quot; é" classifica perto do & quot; e" em vez de depois do & quot; z".
Aqui está a mesma lista de cinco itens sob três regras:
| Entrada | Ordem de bytes (LC_ALL=C sort) |
Ordem dos personagens, caixa dobrada | Ordem natural (Toolz A a Z) |
|---|---|---|---|
item10 |
Item1 |
Item1 |
Item1 |
item2 |
item10 |
item10 |
item2 |
Item1 |
item2 |
item2 |
item3 |
item3 |
item3 |
item3 |
item10 |
zebra |
zebra |
zebra |
zebra |
Ordem de bytes coloca Item1 primeiro apenas porque uma maiúscula I tem um código mais baixo do que qualquer letra minúscula A ordem dos caracteres com dobramento de caixa corrige o capital, mas ainda coloca item10 antes item2. A ordem natural acerta ambos.
Como o caso afeta a classificação alfabética?
Na ordem de bytes brutos, cada letra maiúscula é classificada antes de cada letra minúscula, portanto, uma lista de nomes pode ser dividida em duas execuções alfabéticas: todas as entradas maiúsculas primeiro e depois todas as minúsculas. A classificação consciente do local não faz isso; trata as letras como a mesma letra primeiro e usa apenas maiúsculas e minúsculas para romper os laços.
A opção Ignorar caso vai um passo além e compara tudo como minúsculo Quando duas linhas diferem apenas por caso, elas comparam como iguais, e o tipo as mantém na ordem em que apareceram na entrada Isso importa para duplicatas, abordadas abaixo.
Exemplo trabalhado com a amostra incorporada
Clique em & quot; Carregar amostra" e a entrada é de dez linhas: banana, Apple, cherry, apple, 10, 2, Banana, date, uma linha em branco e grape.
| Configurações | produção | Contagem mostrada |
|---|---|---|
| Predefinições: A a Z, Ignorar o caso ligado, Remover as linhas em branco ligadas | 2, 10, Apple, apple, banana, Banana, cherry, date, grape |
9 linhas, 1 removido |
| Adicionar Remover duplicatas | 2, 10, Apple, banana, cherry, date, grape |
7 linhas, 3 removidas |
| Remova duplicatas, ignore o caso desligado | 2, 10, apple, Apple, banana, Banana, cherry, date, grape |
9 linhas, 1 removido |
| Predefinições mais Descendente | grape, date, cherry, Banana, banana, apple, Apple, 10, 2 |
9 linhas, 1 removido |
Três detalhes são visíveis nessa tabela Os números vêm antes das letras no modo alfabético e 2 precede 10 por causa da ordem natural. Com Ignore caso ligado, Apple fica à frente apple porque apareceu primeiro na entrada Com Ignore case off, o browser' s collation coloca a forma minúscula logo à frente da maiúscula, que é o comportamento usual em navegadores de língua inglesa, e nenhuma das linhas conta como duplicadas porque não são idênticas Descendente é uma reversão completa do resultado ascendente, então linhas amarradas também invertem.
Classificação alfabética vs numérica: quando você deve usar cada um?
Use o modo alfabético (natural) para texto que contenha números, como nomes de arquivos, rótulos de versão ou endereços de rua Use o modo numérico quando cada linha for um número, ou começar com um, e você deseja as linhas ordenadas por valor.
O modo numérico lê o número no início de cada linha da mesma forma que JavaScript's parseFloat faz. Ele pula espaços à esquerda, lê um sinal opcional, dígitos, um ponto decimal e um expoente, e pára no primeiro caractere que não pode continuar um número As linhas que não começam com um número vão para o fundo e mantêm sua ordem original.
| Linha | Valor utilizado | Nota |
|---|---|---|
42 |
42 | |
-7.5 |
-7,5 | Valores negativos e decimais funcionam |
1e3 |
1000 | A notação científica é lida |
12 apples |
12 | Texto após o número ser ignorado |
1,000 |
1 | A leitura pára na vírgula |
$5 |
não um número | Afunda-se no fundo |
v2 |
não um número | Afunda-se no fundo |
Classificação $5, 42, 1,000, -7.5, 12 apples, 1e3 no modo numérico dá:
-7.5
1,000
12 apples
42
1e3
$5
Duas armadilhas estão nessa saída. 1,000 classificado como 1, porque milhares separadores terminam o número. Tire-os primeiro com encontrar e substituir se os seus dados os utilizarem. E $5 caiu para o fundo; remova os símbolos da moeda antes de classificar os preços.
Descer em modo numérico inverte todo o resultado, o que significa que as linhas não numéricas se movem de baixo para cima Se você quiser apenas os números em ordem decrescente, limpe primeiro as linhas não numéricas.
Como funciona a classificação por comprimento?
O modo de comprimento ordena as linhas por quantos caracteres elas contêm, o mais curto primeiro ou o mais longo primeiro com Descendente Linhas de igual comprimento mantêm sua ordem de entrada.
A contagem é o comprimento da cadeia JavaScript, que conta unidades de código UTF-16 Para letras comuns, dígitos e caracteres latinos acentuados que é igual ao número de caracteres visíveis: café é 4. A maioria dos emojis e alguns caracteres raros usam duas unidades de código, então ok👍 conta como 4, não 3. para listas de palavras, nomes ou URLs isso raramente importa.
A classificação de comprimento é útil para detectar valores discrepantes: o título do produto incomumente longo, a entrada truncada ou as palavras-chave mais curtas de uma lista.
Em que ordem acontece a limpeza e a triagem?
Os passos sempre correm em uma sequência fixa, e a ordem explica resultados mais surpreendentes:
- rachar a entrada em linhas, aceitando os finais de linha Unix e Windows.
- aparar cada linha, se o espaço em branco Trim estiver ativado.
- Remover linhas em branco, se estiver ligado. Uma linha contendo apenas espaços conta como em branco, mesmo com Trim off.
- Remover duplicatas, se ligado. A primeira ocorrência é mantida Com Ignore caso ligado, linhas que diferem apenas por caso contam como duplicatas, e o invólucro do primeiro sobrevive.
- Classificar, reverter ou embaralhar o que sobrou.
Porque o corte é opcional e desativado por padrão apple e apple (com um espaço à direita) são duas linhas diferentes quando as duplicadas são comparadas, a menos que você ligue o Trim. Essa é a razão mais comum para um & quot; remover as duplicadas & quot; passar parece faltar às entradas As guias coladas de uma planilha causam o mesmo efeito.
Para trabalhos duplicados mais pesados, como manter a última ocorrência ou comparar apenas parte de cada linha, o guia do removedor de linha duplicado cobre as opções com mais profundidade.
Reverso vs Descendente: qual é a diferença?
Inverter inverte a ordem atual das linhas sem classificar nada. c, a, b torna-se b, a, c. Descendente classifica primeiro e depois vira, então c, a, b em A a Z com Descendente torna-se c, b, a.
Use Reverso quando a ordem original significa algo, como um arquivo de log com entradas mais antigas primeiro, e você quer o mais novo primeiro Use Descendente quando você quiser uma lista ordenada de Z para A ou maior para menor O botão Descendente está desativado nos modos Reverso e Embaralhar porque não tem nada para virar.
O embaralhamento é aleatório o suficiente?
O embaralhamento usa o algoritmo Fisher-Yates, que dá a cada ordem possível uma chance igual quando seus números aleatórios são uniformes, e ele desenha esses números do navegador & #39; s Math.random(). Isso é bom para randomizar uma lista de leitura, uma lista de reprodução ou uma ordem de apresentação Não é uma fonte aleatória criptográfica, por isso é a escolha errada para qualquer coisa onde alguém possa ter uma razão para prever ou contestar o resultado, como um sorteio de prêmios Para aqueles, um dedicado lista randomizador é o melhor ajuste Clique em Shuffle novamente para obter um novo pedido.
É seguro classificar listas confidenciais online?
Com esta ferramenta, sim. classificação e limpeza acontecem lado do cliente, em JavaScript na aba do seu navegador O texto não é carregado ou armazenado, e a ferramenta continua trabalhando com a rede desligada uma vez que a página tenha carregado Listas de endereços de e-mail, nomes de clientes ou nomes de host internos nunca saem da sua máquina.
O limite de tamanho prático é o seu navegador & #39; s memória em vez de um limite de servidor Dezenas de milhares de linhas ordenar instantaneamente em um laptop típico Arquivos muito grandes, nas centenas de megabytes, são melhor tratados na linha de comando.
Quais são os erros de classificação de linha comum?
| Sintoma | Causa | Consertar |
|---|---|---|
file10 acima file2 em outra ferramenta |
Comparação simples de caracteres | Use a classificação natural (A a Z aqui) ou sort -V |
| Entradas em maiúscula, todas no topo | Classificação por ordem de bytes | Use uma classificação com reconhecimento de localidade ou caso Ignorar |
| Duplicados não removidos | Os espaços à direita ou as abas diferem | Ligue o espaço em branco Trim |
| " Apple" e "apple" ambos mantidos | Ignorar caso está desligado | Ativar caso Ignore |
1,000 classificado como 1 |
Separador de milhares termina o número | Remova vírgulas antes da classificação numérica |
Preços com $ na parte inferior |
Linha não começa com um número | Tirar símbolos de moeda primeiro |
| A lista numérica descendente começa com palavras | Linhas não numéricas são invertidas para o topo | Remova primeiro as linhas não numéricas |
| A saída tem mais um & quot; removido" do que o esperado | Uma nova linha à direita criou uma última linha vazia | Esperado; a linha em branco foi abandonada |
Alternativas a um classificador de linha online
| ferramenta | Como ordenar | notas |
|---|---|---|
GNU sort |
sort -f (caso dobrado), sort -n (numérico), sort -V (natural), sort -u (único), sort -r (reverso) |
Scriptable, lida com arquivos enormes; veja o Manual de classificação GNU |
shuf |
shuf list.txt |
Ordem aleatória na linha de comando |
| Classificar por comprimento em uma concha | awk '{ print length, $0 }' list.txt | sort -n | cut -d' ' -f2- |
Conta bytes ou caracteres dependendo da localidade |
| Planilha | Colar em uma coluna, Dados, Classificar | Bom quando as linhas têm vários campos |
| Editores código | O & quot; Ordenar Linhas" comandos em muitos editores | O comportamento varia de acordo com o editor |
| Classificador de linha Toolz | Cole, clique em um modo | Pré-visualização ao vivo, limpeza em uma passagem, lado do cliente |
Observe que sort a saída depende do LC_ALL ou LANG configuração de localidade, razão pela qual o mesmo comando pode dar ordens diferentes em duas máquinas Configuração LC_ALL=C força ordem byte.
Classificando uma lista, passo a passo
- abra o classificador de linha de texto e cole sua lista, um item por linha.
- Escolha de A a Z para palavras e nomes de arquivos, numérico para números ou comprimento para contagens de caracteres.
- Ative o espaço em branco do Trim se a lista tiver sido colada de um documento ou planilha.
- Ative Remover duplicatas se desejar cada entrada uma vez; deixe Ignorar maiúsculas e minúsculas para mesclar diferentes capitalizações.
- Verifique a contagem de saída e o & quot; removido" número.
- Clique em Copiar.
Se a lista também precisar de sua capitalização normalizada, o guia conversor de caso explica título, frase e outros casos, e o hub de ferramentas de texto coleta o restante dos utilitários de texto em um só lugar.



