Satır Sıralayıcı ve Tekrar Temizleyici
Metin satırlarını A'dan Z'ye veya Z'den A'ya sıralayın, tekrar eden ve boş satırları kaldırın; doğal sayısal sıralamayla item2'nin item10'dan önce gelmesini sağlayın — tamamen tarayıcınızda.
216 görüntülenme
Basit Alfabetik Sıralamada "item10" Neden "item2"den Önce Gelir
Standart bir sıralama — JavaScript'teki Array.sort() yönteminin ya da bir e-tablodaki A→Z düğmesinin arkasındaki mantık — iki satırı soldan sağa, karakter karakter, her karakterin Unicode kod noktasına göre karşılaştırır. Bir dizi rakamı tek bir sayı olarak görmez; yalnızca bir karakterin diğerinden küçük mü büyük mü olduğuna, tek seferde tek bir konumda bakar. Bu yüzden item1, item2, item9, item10 ve item20 satırlarını içeren bir liste, karakter karşılaştırmasıyla item1, item10, item2, item20, item9 şeklinde sıralanır: "item10" ile "item2"yi harf harf karşılaştırdığınızda, dizeler "item"e kadar birebir aynıdır ve bir sonraki karakter her şeyi belirler — "1" mi "2" mi. "1" karakteri "2"den küçük olduğu için item10, item2'den önce gelir; oysa on, sayı olarak ikiden büyüktür. Metin içine gömülü sayı geçen her liste bu sorundan etkilenir: sürüm numaraları, image2.jpg ve image10.jpg gibi dosya adları, fatura numaraları ve adım adım talimatlar.
Doğal sıralama — sayısal sıralama olarak da bilinir — ardışık rakam dizisini tek bir sayı olarak tanıyıp karakter karakter değil, değerine göre karşılaştırarak bu sorunu çözer. Bu araçtaki doğal sıralama seçeneği bu mantığı tarayıcının yerleşik Intl API'sine devreder ve her satır çifti için a.localeCompare(b, undefined, {numeric: true, sensitivity: "base"}) çalıştırır. numeric:true bayrağı, karşılaştırmaya rakam dizilerini algılayıp sayı olarak ele almasını söyler; böylece item2 doğru şekilde item10'dan önce, item9 da item20'den önce gelir — bu, listeyi okuyan bir insanın beklediği sıradır, karakter karakter karşılaştırmanın ürettiği sıra değil.
Sadece Karakter Kodları Değil, Dile Duyarlı Karşılaştırma
Alfabetik sıra aynı zamanda hangi dilin kurallarının uygulandığına da bağlıdır ve sayı hiç olmasa bile basit bir karşılaştırma burada başarısız olur. İngilizcede "a" ve "A" aynı harfin iki farklı büyüklüğüdür ve é gibi aksanlı harfler genelde e'ye yakın sıralanır. Türkçede ise "ı" (noktasız i) ve "i" (noktalı i) alfabede kendi ayrı konumlarına sahip iki farklı harftir — sadece sayısal Unicode değerlerine bakan ham bir kod noktası karşılaştırmasının bilemeyeceği bir ayrım. Doğal sıralama seçeneğinin arkasındaki aynı Intl yöntemi olan localeCompare, dil kurallarını dikkate alır: sensitivity: "base" ile büyük/küçük harf ve aksan farklarını sıralama amacıyla eşdeğer sayarken, her alfabenin gerçek harf sırasına da saygı gösterir — bu alfabe İngilizce, Türkçe, Almanca ya da başka bir Latin alfabesi olsun.
Bu araç her iki konuyu tek bir işlemde birleştirir: temel sıra olarak alfabetik A→Z ya da Z→A seçin, isteğe bağlı olarak üzerine doğal sayısal sıralamayı ekleyerek gömülü sayıların rakam rakam değil değerine göre karşılaştırılmasını sağlayın, ardından isteğe bağlı olarak tekrar eden satırları, boş satırları ve baştaki/sondaki boşlukları temizleyin. Tekrar tespiti satırları birebir dize olarak karşılaştırdığından kırpma önemlidir: sonunda boşluk olan "apple " ile "apple", sondaki boşluk önce kaldırılmadıkça bir tekrar denetimine farklı görünür; bu yüzden kırpma ve tekrar kaldırma seçenekleri birbirinden bağımsız değil, birlikte çalışacak şekilde tasarlanmıştır.
Sıkça Sorulan Sorular
Listemi sıraladığımda "item10" neden "item2"den önce geliyor?
Çünkü basit bir alfabetik sıralama metni rakam dizilerini bütün bir sayı olarak değil, karakter karakter karşılaştırır — "1" karakteri "2"den küçüktür, bu yüzden on aslında ikiden büyük olsa da item10 bu tek konumdaki karşılaştırmayı kazanır. Bunu düzeltmek için doğal/sayısal sıralamayı açın: ardışık rakamları tek bir sayı olarak algılayıp karakter yerine büyüklüğe göre karşılaştırır.
Bir satırın "tekrar" sayılması tam olarak ne anlama gelir?
İki satır yalnızca birebir aynıysa — büyük/küçük harf ve baştaki/sondaki boşluklar dahil — tekrar sayılır; "Apple" ile "apple" farklı satırlar olarak, sonunda boşluk olan "banana " da "banana"dan farklı olarak kabul edilir. Boşluk farklarının yok sayılmasını istiyorsanız tekrarları kaldırmadan önce kırpma seçeneğini işaretleyin.
Boşlukları kırpmak kaç tekrarın kaldırıldığını değiştirir mi?
Evet. Aksi halde birebir aynı olan iki satır yalnızca baştaki/sondaki boşluklarla farklıysa, kırpılana kadar ayrı satır sayılır. "Baştaki/sondaki boşlukları kırp" seçeneği tekrar denetimi çalışmadan önce her iki satırı da normalize eder, böylece bu neredeyse aynı satırlar tek satıra iner.
localeCompare, Türkçe veya Almanca gibi İngilizce olmayan metinleri sıralamada güvenilir mi?
Evet — localeCompare, dile özgü doğru sıralama için tasarlanmış tarayıcı yerleşik bir işlevdir; Türkçede noktalı "i" ile noktasız "ı"nın ayrı harfler olduğunu bilir ve genelde aksanlı karakterleri o dilin okuyucusunun beklediği şekilde ele alır — ham Unicode kod noktalarına dayanan basit bir < karşılaştırması bunu yapamaz.
Bu araç metnimi bir yere yüklüyor veya saklıyor mu?
Hayır — her şey tarayıcınızda JavaScript ile yerel olarak çalışır; satırlarınız hiçbir sunucuya gönderilmez, kaydedilmez veya günlüğe yazılmaz. Sekmeyi yenilemek veya kapatmak girdiyi tamamen temizler.
Benzer Araçlar
Sorun Bildir
Satır Sıralayıcı ve Tekrar Temizleyici
Yorumlar
Henüz yorum yok — ilk yorumu siz yazın!