Sano, että näytän tietoja käyttäjälle ruudukossa, raportissa, pudotusvalikossa jne. Kyseiset tiedot sisältävät kentän nimeltä Laskunumero . Tämä kenttä sisältää vain numeroita 2/3 ajasta, mutta toinen 1/3 ajasta on aakkosnumeeristen seosten yhdistelmää.

Tämän vuoksi mikä tahansa lajittelualgoritmi lajittelisi aakkoset numeerisesti eikä numeerisesti . Tästä syystä 1000 olisi paljon ennen vuotta 99. Koska ensimmäinen numero lajitellaan – ei koko arvoa. Muita nimikkeitä, kuten 000333, ei käsitellä ”333”: na ja ne näkyvät ennen vuotta 222.

Onko tässä standardia? Pitäisikö minun yrittää muuntaa kaikki arvot numeeriseksi arvoksi ja lajitella ne eri tavalla? Kuinka he integroituvat takaisin yhteen? Vai onko aakkosnumeerinen lajittelu oikea tapa edetä?

Kommentit

  • Jos sinulla on mahdollisuus sanoa, katkaise kolme ensimmäistä alamerkkijonolla numerot, joissa on aakkoset ja jotka lajitellaan yksinomaan kolmen viimeisen numeron perusteella, sanokaa tapauksessanne ABC333 ja 000222 – voitte toteuttaa tämän. Toki, vaikka se näytetään, se tulee järjestyksessä 000222 ja sitten ABC333. Visuaalisesti olisi kuitenkin hieman hämmentävää nähdä nollia muutamia numeroita vastaan ja aakkosia muita vastaan. Mitä aakkoset ehdottavat?
  • Vaihtelevat pituudet, joten ei SubStringia. Mielestäni " 10 " on ennen " 9 " (itse asiassa FAR ennen yhdeksää) olisi hämmentävää käyttäjille, jotka eivät ' käytä aakkosnumeroita usein. Toisaalta puhdasta seosta näistä ei tosiasiassa ' voida lajitella millään mukavalla tavalla, jonka näen.
  • Jos nämä ovat laskuja, voitko lajitella ne päivämäärän mukaan vai onko se nimenomaisesti lajiteltava itse laskunumeron mukaan? Ehkä voisit käyttää toista saraketta taulukosta ja lajitella ne vastaavasti. Olettaen, että nämä luodaan kasvavassa järjestyksessä, olisi järkevää laskea aikajärjestyksessä, jossa yleisimmin luotu lasku olisi, eikö? En ole varma siitä, mihin pudotusvalikko oikeastaan on tarkoitettu tai miten käyttäjä voi hyötyä lajittelusta. Jos voisit valaista meitä enemmän kentän käytöstä, siitä olisi paljon hyötyä!
  • Se ' on käyttäjän vastuulla. He voivat tarkastella näitä tietoja raportoinnin kautta, kirjanpitonäytön kautta, jonka avulla he voivat tarkistaa saldot Net 30: een nähden (katso kaikki yhden toimittajan laskut) jne. Käyttäjä valitsee, miten he haluavat näytön tai raportin lajitellun. Päivämäärä on vaihtoehto. Mutta niin on myös laskun numero. Sovellukseni eivät luo näitä. Tilaat tarvikkeita, osia jne. Myyjiltä. Kyseinen myyjä palauttaa sinulle laskunumeron. Kuten jos tilasit viidestä verkkokaupasta ja saisit viisi tilausnumeroa. Jotkut ovat numeerisia, jotkut eivät.
  • Sinun tulisi muuntaa nämä numerot numeeriseen muotoon. Käytä tätä vain aakkosnumeeristen arvojen lajitteluun. Muunnettuja numeroita ei tarvitse näyttää käyttäjälle sekaannuksen lisäämiseksi. Suosittelen kuitenkin, että sinulla on esimerkiksi toinen sarake – Päivämäärä aakkosnumeerien täydentämiseksi. Koska aakkosnumeerien lajittelu on hieman hämmentävää, toinen sarake, joka auttaa käyttäjää selvittämään asiaankuuluvan päivämäärän tai jotain muuta, auttaisi paljon.

Vastaa

Windows 7: stä alkaen Microsoft muutti oletusmenetelmäänsä hakemistojen lajittelussa tiedostonimen mukaan ”numeeriseksi” lajitteluksi. (Joitakin tietoja täällä )

Vaikka en voinut löytää sen käyttäytymistä koskevaa eritelmää, onnistuin muuttamaan sitä. Tämän algoritmin pitäisi vertaa kahta aakkosnumeerista merkkijonoa ja määritä kumpi tulee ensin.

  • Jaa kukin tiedostonimi aakkos- ja numeeriseen osaan, ts. nimestä text123moretext456 tulee luettelo {"text", "123", "moretext", "456"}

  • Suorita seuraava vertailu kahden jaetun nimen kullekin osalle:

    • Jos molemmat osat ovat ehdottoman numeerisia, vertaa ne numeroina
      • Jos numerot ovat samat, vertaa niitä merkkijonoiksi
      • Jos merkkijonot ovat samat, siirry seuraavaan osaan
    • Jos molemmat osat ovat ehdottomasti kirjaimia, vertaa niitä merkkijonoina
      • Jos ne ovat samat, siirry seuraavaan osaan
  • Jos osat loppuvat, nimi, jolla on vähemmän osia, tulee f irst

Tulet tekemään seuraavanlaisen tilauksen:

2 12 200000 1000000 a a12 b2 text2 text2a text2a2 text2a12 text2b text12 text12a 

Kommentit

  • Tätä tarkalleen etsin, ja tuloksena olevalla lajittelujärjestyksellä on järkeä. Kiitos!

Vastaus

Tämä kysymys (ja erityisesti @Harrison Painen vastaus) oli auttanut minua projektini ja haluan tarjota hänen vastauksensa [javascript] -toteutuksen myöhempää tarvetta varten.Tässä on lajittelu function:

var win7sort = function(a, b) { var regex = /[^\d]+|\d+/g; // Split each filename into alphabetical and numeric parts var ar = a.match(regex); var br = b.match(regex); var localeCompare; // For each part in the two split names, perform the following comparison: for(var ia in ar) { for(var ib in br) { var ari = ar[ib]; if(ari == undefined) { ari = ""; } var bri = br[ib]; if(bri == undefined) { bri = ""; } // If both parts are strictly numeric, compare them as numbers if(!isNaN(ari) && !isNaN(bri)) { localeCompare = ari.localeCompare(bri, {}, { numeric: true }); } else { localeCompare = ari.localeCompare(bri, {}, { ignorePunctuation: true, sensitivity: "base" }); } if(localeCompare != 0) { // If you run out of parts, the name with the fewest parts comes first return localeCompare; } // If they"re the same, move on to the next part } } return localeCompare; }; 

Ja näin sitä käytetään:

var list = ["1", "a", "z", "new folder 2", "new folder 03", "new folder 03-a", "new folder 039", "new folder 5", "new folder 41", "2", "21", "3", "41", "100"]; var sortedList = list.sort(win7sort); 

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *