localeCompare
Sziasztok,
szeretnék adatokat a magyar ABC szerint rendezni, gondoltam a localeComapare az én barátom, viszont az általam elvárt eredményt kapom:Olyan mintha csak 'ékezettelenítene', és nem figyelembe venné azokat a locale paraméternek megfelelően, pedig a böngésző támogatja ezt a függvényt.
Vagy nem jól értelmezem a specit? mdn
■ szeretnék adatokat a magyar ABC szerint rendezni, gondoltam a localeComapare az én barátom, viszont az általam elvárt eredményt kapom:
// ez jó
var items = ['a', 'á'];
items.sort((a, b) => a.localeCompare(b, 'hu'));
// ez is
var items = ['an', 'án'];
items.sort((a, b) => a.localeCompare(b, 'hu'));
// de ez már nem
var items = ['an', 'ál'];
items.sort((a, b) => a.localeCompare(b, 'hu'));
Vagy nem jól értelmezem a specit? mdn
Ez így jó, lásd MTA
Mi az elvárás?
Nálad mi az eredmény, és mit várnál helyette?
Bakker, sosem voltam jó
Persze ettől még az az ügyfél igénye, hogy az 'Anna' megelőzze az 'Álmos'-t.
Akkor gender? :)
Ha nem sok adatról van szó, akkor írhatsz saját "névsorolót" is, kb 1000 adatig még lehet buborék módszerrel is. De nem biztos, hogy jó ötlet ezt a kliensen intézni.
Bubble sortot inkább ne
Amúgy szerintem nem a nem a lényeg, hanem hogy az "a" előzze meg az "á"-t.
tanpélda
Egyébként van aki pont buborénak tippeli az usort-ot is, ha kipróbálod, kiderülhet. :) (A linken szereplő példa nem jó, mert nincs return value.)
Nem olyan rossz dolog az, főleg ha más nincs. Tanulni - kipróbálni továbbra is ajánlom.
Elrettentő példa :)
Az idézett linken lévő összehasonlítások alapján pedig aki buborékot mond, annak inkább ne adjunk a véleményére :) Buborék esetben a párok 1->2, 2->3, 3->4, 1->2, 2->3, 1->2 lennének. Vagy az optimalizált esetben csak az első három. Az
usort
quicksortot használ, ami egy avg case O(n log n) algoritmus. Ha kipróbálod a quicksortot a linkelt példában szereplő input tömbre, pont ezeket a párokat fogja összehasonlítani (median pivot választással).A buborékrendezés 1000 elem esetén 100x rosszabb, mint az usort. Vagyis inkább ne tanácsoljunk buborék implementálást a beépített rendezési algoritmusok helyett :) Használjuk a beépített rendezést, amíg nem értjük és tudjuk pontosan, hogy miért akarunk esetleg mást használni speciális esetekben.
Még mindig nem értünk egyet
Elsőre csak annyit írtál,
A "tanuljon meg rendezni" szerintem egyébként egy nem értelmezhető cél. Komoly szakik által kikutatott és bebizonyított helyességű algoritmusok állnak a rendelkezésünkre, amik közül a kontextust ismerve tudunk optimálisat választani. Ha a tanulás a cél, akkor a mögöttes elméletet kell megismerni (computational complexity, space complexity, Big-O notation, algorithm analysis, stable vs unstable sorting stb), majd ezen ismeretek fényében az egyes rendezési algoritmusokat. De a buborékrendezésből nem vezet út a többi rendezési algoritmusba. A közös csak annyi bennük, hogy (többnyire) használnak összehasonlítást és cseréket :) Ezért szerintem tanulási célból nem vezet messzire egy bubble sort implementálása. Amiben egyébként egyetértünk, hogy érdemes belenézni a fekete dobozokba, hogy értsük mi történik (leaky abstractions :)).
Ő értette,
Prod-ra rég megoldotta, és bocsi, nem látom értelmét azon vitatkozni, hogy én kinek mit javaslok. Az az én javaslatom, Te odaírtad, hogy ne javasoljam én sem.
Ez így nem helyes, inkább úgy kéne, hogy Te nem javaslod, mert...
Kérlek azt hadd döntsem el én, hogy kinek mikor és mit javaslok, és ezzel le is zárnám ezt az off-szálat.
off :-)
Mindemellett szerintem teljesen helyénvaló, ha valaki olvas egy rossz tanácsot, akkor leírja, hogy ez rossz tanács. Majd megkéri, hogy többet ne tanácsolja ugyanezt. És, ha még alá is van támasztva, akkor az még jobb. :)
És persze no offense és világbéke mindenkinek! :)
Akkor én nem értek valamit?
És egy picit amiatt is sántít, hogy a kérés lényege az volt, hogy az én javaslatom hadd maradjon az enyém, és azt gondolom, ha innen közelítjük a dolgot, hogy ki mit ne csináljon, akkor érdemes megnézni a first point-ot is. Nyilván ha valaki Neked mondja, hogy "ezt ne csináld", akkor benned is felmerül annak a lehetősége, hogy megkéred: "ne mondd meg, hogy mit csináljak". Ha nem értesz egyet vele. Ettől te még nem ugyanazt tetted, mert az első "ne csináld" nélkül nem is merült volna fel. :)
Neked is leírom: nem tanácsoltam azt, hogy prod környezetben "buborékoljon", sőt, ahogy belementünk, ezt konkrétan jeleztem is. Azt pedig továbbra is fenntartom, hogy tanulási célból hasznos, ha valaki egyszer végigmegy rajta.
peace meg freedom, természetesen. :)
Remélem ez a "ne mondd meg
Csak hogy tiszta legyen, így nézett ki a dolog:
1. Ügyfél igény leírása
2. Te javasoltad a buborékrendezést (utalva rá, hogy az nem annyira jó dolog)
3. Én írtam, hogy azt inkább ne javasoljuk
4. Majd jelezted, hogy csak tanulási célzattal javasoltad
Lehet én nem olvasok jól a sorok között, de semmit nem olvastam a 2.-ben, ami szerint prod kódban ezt nem javaslod, csak tanulás miatt nézzen bele (sőt). Ennyi miatt reagáltam, semmi más miatt.
Viszont nem nagyon értem miért kell ennyire védeni egy olyan javaslatot, aminél te is utaltál rá, hogy nagyobb input esetén lehetnek gondok. Nem téged, vagy a tudásodat kritizáltam, hanem egy javaslatot, ami nem az én szubjektív ítételem alapján, hanem objektíven nem jó. Szerencsére olyan szakmában dolgozunk, amiben sok esetben nagyon objektív dolgok mentén lehet dönteni, vagy véleményt formálni. Egy rendezési algoritmus pont ilyen.
És ezt elhagyva, a 4. ponttól lehet arról beszélgetni, hogy mennyire messzire vezet egy buborékrendezés implementálása a rendezési algoritmusok megismerésében. A véleményem ott van :) De azt egy szóval sem mondtam, hogy szerintem nem kell ismerni a buborékrendezést. Én is tanultam (többször is), implementáltam is (sulikban). Annyit mondtam csak, hogy ez az algoritmus kb egy elrettentő példa (annak is tanítják), illetve hogy megismerve semennyire nem kerülünk közelebb a gyakorlatban is használható rendező algoritmusokhoz.
Elnézést kérek
Úgy látom, túlreagáltam a dolgot, és mivel szerintem ezt nem szabad fronttal vagy bármi stresszel indokolni: kedves BlaZe, elnézésedet kérem.
(Amúgy ma már nincsenek is frontok, csak kilőnek pár rakétát és kész is. :-D )
sort
Array#sort
függvényt, amit a kérdező szerencsére használ, így nem kell neki saját rendező algoritmust írnia, hanem neki csak az összehasonlítást kell implementálnia. Egyébként böngésző- és adatfüggő, hogy milyen algoritmus fog futni a rendezés alatt, általában Quicksort, Insertion sort, Merge sort, Selection sort, Radix sort és Introsort közül választ az implementáló.De legalább a kérdező tudni
Kapcsolódik:
Egyelőre sikerült
Egyébként 1-200as nagyságrendű adatot kell rendezni, és a speci szerint frontenden.
A lényeg, h egyelőre a localeCompare eredménye elfogadva.