Regelsortering & Duplicaten Verwijderen

Sorteer tekstregels van A tot Z of Z tot A, verwijder dubbele en lege regels, en corrigeer natuurlijke getalvolgorde zodat item2 vóór item10 komt — allemaal direct in de browser.

218 weergaven

Waarom "item10" vóór "item2" wordt gesorteerd bij een gewone alfabetische sortering

Een standaardsortering — het soort achter de methode Array.sort() in JavaScript of de knop A→Z in een spreadsheet — vergelijkt twee regels teken voor teken, van links naar rechts, met het Unicode-codepunt van elk teken. Er wordt niet gekeken naar een reeks cijfers als geheel getal; er wordt alleen gevraagd of het ene teken kleiner of groter is dan het andere, één positie tegelijk. Dat is waarom een lijst met item1, item2, item9, item10 en item20 teken voor teken wordt gesorteerd als item1, item10, item2, item20, item9: bij het vergelijken van "item10" en "item2" letter voor letter zijn de tekenreeksen identiek tot en met "item", en het allereerstvolgende teken beslist alles — "1" versus "2". Omdat het teken "1" kleiner is dan het teken "2", komt item10 vóór item2, ook al is tien numeriek groter dan twee. Elke lijst waarin getallen binnen tekst voorkomen, lijdt hieronder: versienummers, bestandsnamen zoals afbeelding2.jpg en afbeelding10.jpg, factuurnummers en stapsgewijze instructies.

Natuurlijke sortering — ook wel numerieke sortering genoemd — lost dit op door een reeks opeenvolgende cijfers te herkennen als één getal en de waarde ervan te vergelijken in plaats van cijfers één teken tegelijk te vergelijken. De optie voor natuurlijke sortering in deze tool delegeert die logica aan de in de browser ingebouwde Intl-API en voert a.localeCompare(b, undefined, {numeric: true, sensitivity: "base"}) uit op elk paar regels. De vlag numeric:true vertelt de vergelijking om cijferreeksen te detecteren en als getallen te behandelen, zodat item2 correct vóór item10 terechtkomt, en item9 vóór item20 — de volgorde die iemand die de lijst leest zou verwachten, niet de volgorde die een teken-voor-tekenvergelijking oplevert.

Taalbewuste vergelijking, niet alleen tekencodes

Alfabetische volgorde hangt ook af van de regels van welke taal worden toegepast, en dit is waar een gewone vergelijking faalt, zelfs zonder dat er getallen bij betrokken zijn. In het Nederlands en Engels zijn "a" en "A" dezelfde letter in twee vormen, en geaccentueerde letters zoals é worden meestal dicht bij e gesorteerd. Turks behandelt echter "ı" (i zonder punt) en "i" (i met punt) als twee afzonderlijke letters met hun eigen, aparte plaats in het alfabet — een onderscheid waar een rauwe codepuntvergelijking, die alleen numerieke Unicode-waarden controleert, geen weet van heeft. localeCompare, dezelfde Intl-methode achter de optie voor natuurlijke sortering, houdt rekening met taalregels: met sensitivity: "base" behandelt het hoofdletter- en accentverschillen als gelijkwaardig voor sorteerdoeleinden, terwijl het toch de werkelijke letterorde van elk alfabet respecteert, of dat alfabet nu Engels, Turks, Duits of een andere taal met Latijns schrift is.

Deze tool combineert beide aspecten in één stap: kies alfabetisch A→Z of Z→A als basisvolgorde, voeg optioneel natuurlijke numerieke sortering toe zodat ingebedde getallen op waarde in plaats van op cijfer worden vergeleken, en verwijder vervolgens optioneel dubbele regels, lege regels, en voorloop- of volgspaties. Omdat het detecteren van duplicaten regels als exacte tekenreeksen vergelijkt, is trimmen van belang: "appel" en "appel " (met een spatie erachter) zien er voor een duplicaatcontrole anders uit tenzij de spatie eerst wordt verwijderd, dus de trim- en duplicaatverwijderingsopties zijn ontworpen om samen te werken in plaats van als losse schakelaars.

Veelgestelde vragen

Waarom verschijnt "item10" vóór "item2" wanneer ik mijn lijst sorteer?

Omdat een gewone alfabetische sortering tekst teken voor teken vergelijkt in plaats van cijferreeksen als gehele getallen te behandelen — het teken "1" is kleiner dan "2", dus item10 wint die vergelijking op één positie, ook al is tien groter dan twee. Schakel natuurlijke of numerieke sortering in om dit te corrigeren: deze detecteert opeenvolgende cijfers als één getal en vergelijkt de grootte in plaats van afzonderlijke tekens.

Wat telt precies als een "dubbele" regel?

Twee regels zijn alleen duplicaten als ze exact overeenkomen, teken voor teken, inclusief hoofdlettergebruik en eventuele voorloop- of volgspaties — "Appel" en "appel" worden als verschillende regels behandeld, net als "banaan" en "banaan " met een spatie erachter. Schakel de trim-optie in vóór het verwijderen van duplicaten als verschillen in witruimte genegeerd moeten worden.

Verandert het trimmen van witruimte hoeveel duplicaten worden verwijderd?

Ja. Als twee verder identieke regels alleen verschillen door voorloop- of volgspaties, tellen ze als aparte regels totdat ze getrimd zijn. Door "voorloop- en volgspaties trimmen" aan te vinken, worden beide genormaliseerd voordat de duplicaatcontrole draait, zodat die bijna-identieke regels tot één regel samenvallen.

Is localeCompare betrouwbaar voor het sorteren van niet-Engelse tekst, zoals Turks of Duits?

Ja — localeCompare is een ingebouwde browserfunctie die specifiek is ontworpen voor taalcorrecte sortering, dus weet het dat het Turks een "i" met punt en een "ı" zonder punt als aparte letters behandelt, en verwerkt het geaccentueerde tekens over het algemeen zoals een lezer van die taal zou verwachten — iets wat een gewone kleiner-dan-vergelijking op basis van rauwe Unicode-codepunten niet kan.

Uploadt of bewaart deze tool mijn tekst ergens?

Nee — alles draait lokaal in de browser met JavaScript; regels worden nooit naar een server verzonden, gelogd of opgeslagen. Het vernieuwen of sluiten van het tabblad wist de invoer volledig.

Reacties

Nog geen reacties — schrijf de eerste!

Vergelijkbare tools