ugrás a tartalomhoz

localeCompare

mahoo · 2018. Júl. 30. (H), 18.55
Sziasztok,
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'));
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
 
1

Ez így jó, lásd MTA

mind1 valami név · 2018. Júl. 30. (H), 20.34
Ez így jó, lásd MTA helyesírási szabályzat, ékezetek, sorbarendezés!
2

Mi az elvárás?

Endyl · 2018. Júl. 30. (H), 20.38
Nálam ez az eredmény (FF 62.0b12):
Array [ "a", "á" ]
Array [ "an", "án" ]
Array [ "ál", "an" ]
Ez tudtommal megfelel a magyar sorrendezési szabályoknak.

Nálad mi az eredmény, és mit várnál helyette?
3

Bakker, sosem voltam jó

mahoo · 2018. Júl. 30. (H), 21.10
Bakker, sosem voltam jó nyelvtanból :)

Persze ettől még az az ügyfél igénye, hogy az 'Anna' megelőzze az 'Álmos'-t.
5

Akkor gender? :)

Pepita · 2018. Júl. 31. (K), 09.06
Ha az a cél, hogy a hölgyeket engedjük előre, akkor nem abc sorbarendezésre van szükség. :)
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.
6

Bubble sortot inkább ne

BlaZe · 2018. Júl. 31. (K), 12.51
Bubble sortot inkább ne ajánlunk 1000 elemig se :) Ha már muszáj PHP-ban, akkor ott az usort, uasort, az hatékonyabb. De nem muszáj, SQL oldalon is meg lehet valósítani. Ha tud functional indexet az SQL (PostgreSQL pl), akkor az még hatékonyabb is lesz. Persze ha van SQL :)

Amúgy szerintem nem a nem a lényeg, hanem hogy az "a" előzze meg az "á"-t.
7

tanpélda

Pepita · 2018. Júl. 31. (K), 14.07
Ahhoz, hogy valaki elkezdjen saját sorbarendezést fejleszteni (először), nagyon jó példa a buborék. Lehet optimalizálni is, nincs szükség n * n feltételre.
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.
9

Elrettentő példa :)

BlaZe · 2018. Aug. 1. (Sze), 15.33
Valóban, tanítani szokták, hogy megmutassák a rendezési algoritmusok fő problémáját, a műveleti igényt. A bubble sort production használatra gyakorlatilag alkalmatlan az O(n^2) avg case műveleti igénye miatt. Akkor is, ha "optimalizálod" (figyeled az utolsó cseréket). Gyakorlatilag a létező legrosszabb rendezési algoritmus :)

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.
10

Még mindig nem értünk egyet

Pepita · 2018. Aug. 1. (Sze), 16.10
Annak egyrészt örülök, hogy az usort nem buborék, ez rendben van. :)

inkább ne tanácsoljunk buborék implementálást a beépített rendezési algoritmusok helyett
Valószínű, hogy még mindig nem érted a célom a javaslattal. Tanuljon meg rendezni != használj egy rendező fv-t. Márpedig megtanulni rendezni nagyon jó módszer a buborék, mert szögeccerű.
Használjuk a beépített rendezést
production igen, de semmit nem tanul belőle, ha csak használja.
11

Elsőre csak annyit írtál,

BlaZe · 2018. Aug. 1. (Sze), 17.22
Elsőre csak annyit írtál, hogy
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
további utalások nélkül. Csak ezért reagáltam, nehogy valaki egy ilyet beemeljen prod kódba :) Pláne, hogy ott vannak a kész, átlagosan optimálisabb megoldások a nyelvben.

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 :)).
12

Ő értette,

Pepita · 2018. Aug. 2. (Cs), 09.22
csak Te nem. :)

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.
13

off :-)

T.G · 2018. Aug. 2. (Cs), 10.08
Van azért annak valami furcsa bája, hogy miközben kikérem magamnak azt, hogy a másik ne mondja meg mit ne csináljak, aközben én leírom, hogy ő mit ne csináljon. :)

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! :)
14

Akkor én nem értek valamit?

Pepita · 2018. Aug. 2. (Cs), 13.37
kikérem magamnak azt, hogy a másik ne mondja meg mit ne csináljak, aközben én leírom, hogy ő mit ne csináljon
Nem kikértem, hanem megkértem.
É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. :)

valaki olvas egy rossz tanácsot
Egy szerinte rossz tanácsot, amit aztán meg is indokoltam, de ez nem volt elég.
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.

És, ha még alá is van támasztva
A magam részéről a tanulási ágat annyival alá tudom támasztani, hogy van olyan (assembly) könyvem, amiben szerepel, és mit ad Isten: főiskolán évekig tantárgy volt az assembly, ugyanezzel a könyvvel. :)

peace meg freedom, természetesen. :)
15

Remélem ez a "ne mondd meg

BlaZe · 2018. Aug. 2. (Cs), 21.46
Remélem ez a "ne mondd meg mit csináljak" csak a front miatt van :) Az, hogy valamit "inkább ne javasoljunk" nem utasítás, vagy korlátozás. Csak azt jelenti, hogy nem jó tanács. Felesleges ebbe személyes támadást belelátni, szó sincs erről.

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.
16

Elnézést kérek

Pepita · 2018. Aug. 3. (P), 09.26
Visszaolvasva látom, hogy az elején pontatlanul / sietősen fogalmaztam, onnantól kezdve pedig félreértettük egymást.

Ú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 )
17

sort

Poetro · 2018. Aug. 7. (K), 11.18
Még szerencse, hogy a JavaScript tartalmazza az 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ó.
18

De legalább a kérdező tudni

inf · 2018. Aug. 7. (K), 15.27
De legalább a kérdező tudni fogja mennyi szopás van a rendezéssel is, ha megpróbálja bubble-el. :D
8

Egyelőre sikerült

mahoo · 2018. Júl. 31. (K), 19.59
Egyelőre sikerült elfogadtatni, h a rendezés eredménye megfelel a szabályoknak.

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.