Isih Semulajadi Elemen Tatasusunan dengan Komponen Rentetan dan Angka
Dalam sesetengah kes, kami menghadapi tatasusunan yang mengandungi elemen yang mengikut format tertentu, seperti sebagai rentetan dengan nombor terbenam. Mengisih tatasusunan sedemikian dalam susunan logik, yang dikenali sebagai "isihan semula jadi", memberikan cabaran.
Cabaran
Pertimbangkan tatasusunan seperti:
["IL0 Foo", "PI0 Bar", "IL10 Baz", "IL3 Bob says hello"]
Untuk mencapai yang diidamkan pengisihan:
["IL0 Foo", "IL3 Bob says hello", "IL10 Baz", "PI0 Bar"]
Penyelesaian
Isihan semulajadi memerlukan fungsi perbandingan yang mempertimbangkan kedua-dua komponen angka dan teks dalam setiap elemen. Berikut ialah pelaksanaan JavaScript:
function naturalCompare(a, b) { var ax = [], bx = []; a.replace(/(\d+)|(\D+)/g, function(_, , ) { ax.push([ || Infinity, || ""]) }); b.replace(/(\d+)|(\D+)/g, function(_, , ) { bx.push([ || Infinity, || ""]) }); while(ax.length && bx.length) { var an = ax.shift(); var bn = bx.shift(); var nn = (an[0] - bn[0]) || an[1].localeCompare(bn[1]); if(nn) return nn; } return ax.length - bx.length; }
Penjelasan
Contoh
test = [ "img12.png", "img10.png", "img2.png", "img1.png", "img101.png", "img101a.png", "abc10.jpg", "abc10", "abc2.jpg", "20.jpg", "20", "abc", "abc2", "" ]; test.sort(naturalCompare)
Susun atur yang diisih ialah:
["", "20", "20.jpg", "abc", "abc2", "abc2.jpg", "abc10", "abc10.jpg", "img1.png", "img2.png", "img10.png", "img12.png", "img101.png", "img101a.png"]
Atas ialah kandungan terperinci Bagaimanakah anda mengisih tatasusunan dengan elemen yang mengandungi kedua-dua rentetan dan nombor dalam susunan semula jadi, seperti 'img12.png' dan 'img10.png'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!