- log69 blogja
- A hozzászóláshoz be kell jelentkezni
- 1148 megtekintés
Hozzászólások
Nem ertek a CS-hez, de az Array::uniq nem tunik tul optimalisnak. Tomornek tomor, de latszolag eleg sokszor iteral vegig a tombon.
Az Array::sample ugyszinten. Nem lenne egyszerubb generalni egy random szamot a tomb meretetol fuggoen, es azt az indexu elemet visszaadni a this.shuffle().last() helyett?
Szerk: ok, kozben feltunt, hogy a sample() n darab erteket ad vissza :)
- A hozzászóláshoz be kell jelentkezni
A "uniq" sajnos O(n^2) léptékű, erre nem tudok jobb módszert jelenleg :) Bár ugye ez a gyakorlatban normál eloszlást alapul véve kb. ennek fele lesz mert ugye az "indexOf" csak az első találatig vizsgál. Sajnos kell a két darab "reverse" is hogy ne módosítsa a sorrendet.
Viszont Stackoverflow-n méregették az algo-kat és a filter metódusos jól hozott emlékeim szerint. ECMA6-hoz van még jó megoldás, de nyilván tartani szeretnék egy megfelelő szintű visszafelé kompatibilitást.
A "sample" metódussal is Ruby szerű viselkedést szeretnék.
- A hozzászóláshoz be kell jelentkezni
Most ragugliztam, itt egy olyan megoldas van a .uniq()-ra ami O(n) kozeli (off: a C# .Distinct() metodus is ezt a modszert hasznalja):
https://coffeescript-cookbook.github.io/chapters/arrays/removing-duplic…
Csak ugatom a javascriptet, a coffee scriptet meg csak tavolrol lattam, rubyt meg tavolrol sem, ugyhogy nem tudom a fenti megoldas jo-e neked visszafele meg ruby kompatibilitas szempontjabol.
- A hozzászóláshoz be kell jelentkezni
Ez jó lesz. Még meg kell néznem hogy működik, de cserélem. Kösz.
- A hozzászóláshoz be kell jelentkezni
Szuper. Szétdobja egy Hash objektumba azonos kulccsal és értékkel (önmaga) és a maradék értéket veszi vissza :)
- A hozzászóláshoz be kell jelentkezni
A "min" és "max" hívásnak van egy szépség hibája, hogy ugye itt a tömböt argument-ként dobom át és így van egy relatíve alacsony felső határa a számuknak (1 millió elemre már hibát dob). Viszont gyorsabb mintha ciklusba tenném. Helyzet függő.
- A hozzászóláshoz be kell jelentkezni
Én egyébként a shuffle-t implementálnám a sample speciális eseteként, és nem a sample-t építeném rá a shuffle-re. Így meg lehet spórolni egy Array létrehozást, miközben az algoritmust egyetlen helyen kell csak módosítani.
Uniq-ot es6-ban így implementáltam amikor kellett (és nem akartam csak ezért behúzni semmilyen libraryt):
function uniq(array) {
const elements = new Set();
return array.filter((element) => {
const duplicate = elements.has(element);
duplicate || elements.add(element);
return !duplicate;
});
}
Ugyanezt egy sima objecttel is meg lehet csinálni és akkor nem es6 függő a dolog, de nem fog működni object elemekre.
- A hozzászóláshoz be kell jelentkezni
Igazad van a "sample"-lel, nem rossz. Felesleges minden egyes "sample" híváshoz az egész tömböt felrázni. Átírtam, lásd:
http://paste.ubuntu.com/25876173/
Szerk.: közben tettem még bele határérték ellenőrzést, ez az egyetlen a metódusok közül ahol borulhat az input alapján:
- A hozzászóláshoz be kell jelentkezni
Megj: a kevésbé hatékony kódokra mutató linkeket eltávolítottam.
- A hozzászóláshoz be kell jelentkezni
Szerintem publikálhatnád valahol, engem pl. érdekelnének, tanulságos szokott lenni a fejlesztés.
- A hozzászóláshoz be kell jelentkezni
Mire gondolsz? A változások publikálására? Ez olyan kicsi kód rész hogy erről nem csinálok.
Az aktuális kód elérhető itt (ma is javítottam rajta):
https://frontfoo.com/?user_main=f&pass_main=f&menu=code&run=0&uuid=comm…
- A hozzászóláshoz be kell jelentkezni