Ordinatore di Righe e Rimozione Duplicati
Ordina le righe di testo dalla A alla Z o dalla Z alla A, rimuovi le righe duplicate e vuote e correggi l'ordine numerico naturale in modo che item2 venga prima di item10 — tutto all'istante nel browser.
215 visualizzazioni
Perché "item10" Viene Prima di "item2" in un Ordinamento Alfabetico Semplice
Un ordinamento standard — quello dietro al metodo Array.sort() in JavaScript o al pulsante A→Z di un foglio di calcolo — confronta due righe carattere per carattere, da sinistra a destra, usando il code point Unicode di ciascun carattere. Non considera una sequenza di cifre come un numero intero; si limita a chiedere se un carattere è più piccolo o più grande di un altro, una posizione alla volta. Ecco perché un elenco contenente item1, item2, item9, item10 e item20 viene ordinato, carattere per carattere, come item1, item10, item2, item20, item9: confrontando "item10" e "item2" lettera per lettera, le stringhe sono identiche fino a "item", e il carattere successivo decide tutto — "1" contro "2". Poiché il carattere "1" è più piccolo del carattere "2", item10 viene prima di item2, anche se dieci è numericamente maggiore di due. Ogni elenco in cui compaiono numeri dentro del testo soffre di questo problema: numeri di versione, nomi di file come image2.jpg e image10.jpg, numeri di fattura e istruzioni passo per passo.
L'ordinamento naturale — chiamato anche ordinamento numerico — risolve il problema riconoscendo una sequenza di cifre consecutive come un unico numero e confrontandone il valore anziché confrontare le cifre una alla volta. L'opzione di ordinamento naturale di questo strumento delega questa logica all'API Intl integrata nel browser, eseguendo a.localeCompare(b, undefined, {numeric: true, sensitivity: "base"}) su ogni coppia di righe. Il flag numeric:true indica al confronto di rilevare sequenze di cifre e trattarle come numeri, così item2 si posiziona correttamente prima di item10, e item9 prima di item20 — l'ordine che una persona che legge l'elenco si aspetterebbe, non quello prodotto da un confronto carattere per carattere.
Confronto Sensibile alla Lingua, Non Solo Codici dei Caratteri
L'ordine alfabetico dipende anche da quali regole linguistiche vengono applicate, ed è qui che un confronto semplice fallisce anche senza numeri coinvolti. In inglese, "a" e "A" sono la stessa lettera in due varianti di maiuscolo/minuscolo, e le lettere accentate come é vengono di solito ordinate vicino a e. Il turco, invece, tratta "ı" (i senza punto) e "i" (i con punto) come due lettere distinte con posizioni proprie nell'alfabeto — una distinzione che un confronto grezzo di code point, il quale controlla solo valori numerici Unicode, non ha modo di conoscere. localeCompare, lo stesso metodo Intl dietro l'opzione di ordinamento naturale, tiene conto delle regole locali: con sensitivity: "base" tratta le differenze di maiuscole/minuscole e di accenti come equivalenti ai fini dell'ordinamento, pur rispettando l'ordine reale delle lettere di ciascun alfabeto, sia esso inglese, turco, tedesco o un'altra lingua con scrittura latina.
Questo strumento combina entrambi gli aspetti in un solo passaggio: scegli l'ordine alfabetico A→Z o Z→A come base, aggiungi facoltativamente l'ordinamento numerico naturale in modo che i numeri incorporati vengano confrontati per valore anziché per cifra, poi rimuovi facoltativamente le righe duplicate, le righe vuote e gli spazi iniziali o finali. Poiché il rilevamento dei duplicati confronta le righe come stringhe esatte, la rimozione degli spazi conta: "apple" e "apple " (con uno spazio finale) risultano diverse in un controllo dei duplicati a meno che lo spazio finale non venga rimosso prima, quindi le opzioni di trim e di rimozione duplicati sono progettate per lavorare insieme e non come interruttori indipendenti.
Domande Frequenti
Perché "item10" compare prima di "item2" quando ordino il mio elenco?
Perché un ordinamento alfabetico semplice confronta il testo carattere per carattere invece di trattare le sequenze di cifre come numeri interi — il carattere "1" è più piccolo di "2", quindi item10 vince quel confronto in una singola posizione anche se dieci è maggiore di due. Attiva l'ordinamento naturale o numerico per risolvere il problema: rileva cifre consecutive come un unico numero e confronta la grandezza invece dei singoli caratteri.
Cosa conta esattamente come riga "duplicata"?
Due righe sono considerate duplicate solo se coincidono esattamente, carattere per carattere, comprese maiuscole/minuscole e qualsiasi spazio iniziale o finale — "Apple" e "apple" sono trattate come righe diverse, così come "banana" e "banana " con uno spazio finale. Attiva l'opzione di trim prima di rimuovere i duplicati se le differenze di spaziatura devono essere ignorate.
Rimuovere gli spazi cambia quanti duplicati vengono eliminati?
Sì. Se due righe altrimenti identiche differiscono solo per spazi iniziali o finali, vengono contate come righe separate finché non vengono ripulite. Selezionando "rimuovi spazi iniziali e finali" entrambe le righe vengono normalizzate prima che venga eseguito il controllo dei duplicati, così queste righe quasi identiche si uniscono in una sola.
localeCompare è affidabile per ordinare testo non inglese, come turco o tedesco?
Sì — localeCompare è una funzione nativa del browser progettata specificamente per un ordinamento corretto secondo la lingua, quindi sa che il turco tratta la "i" puntata e la "ı" senza punto come lettere separate, e in genere gestisce i caratteri accentati come si aspetterebbe un lettore di quella lingua, cosa che un semplice confronto "minore di" basato su code point Unicode grezzi non può fare.
Questo strumento carica o memorizza il mio testo da qualche parte?
No — tutto viene eseguito localmente nel browser usando JavaScript; le righe non vengono mai inviate a un server, registrate o salvate. Aggiornare o chiudere la scheda cancella completamente l'input.
Strumenti Simili
Segnala un Problema
Ordinatore di Righe e Rimozione Duplicati
Commenti
Ancora nessun commento — scrivi il primo!