Fa transzformáció
Sziasztok!
Van egy általános jellegű probléma, amire a leghatékonyabb megoldást igyekszem megtalálni.
Arról van szó, hogy van egy fa adatszerkezetem, amit át szeretnék alakítani egy másik fává, úgy, hogy az egyes node-okat feldolgozom. Arra vagyok kíváncsi, hogy ti hogyan oldanátok meg ezt a problémát?
példa:=>(Egyelőre nem árulok el abból semmit, hogy én merre indulnék, hátha valami gyökeresen új ötletet kapok.)
■ Van egy általános jellegű probléma, amire a leghatékonyabb megoldást igyekszem megtalálni.
Arról van szó, hogy van egy fa adatszerkezetem, amit át szeretnék alakítani egy másik fává, úgy, hogy az egyes node-okat feldolgozom. Arra vagyok kíváncsi, hogy ti hogyan oldanátok meg ezt a problémát?
példa:
{
d: "{$c.d}"
c: "{$a.b.c}",
a:
{
b:
{
c:
{
d:1
}
}
}
}
{
d: 1,
c: {d:1},
a:
{
b:
{
c:
{
d:1
}
}
}
}
// tree.a.b.c===tree.c: true
No igazából ez nem csak fákra
Persze mindezt lehet úgy is, hogy nem tesszük sorba, csak addig toljuk végig egy while-al, amíg minden elem el nem fogy belőle. Meg lehet úgy is, hogy már a feldolgozás közben úgy adjuk hozzá az új elemeket, hogy eleve sorban legyen, meg úgy is lehet, hogy már a feldolgozás közben minden körben ellenőrizzük, hogy az új elem, ami bekerült a referenciába szükséges volt e valamelyikhez, ami a queue-ben van.
Most tákolok javascriptben egy kisebb modult, ami ilyet használ, majd ha elkészült, akkor ismertetem.
Kör
processed['a.b.c'] = a.b.c
) és ebben keresnék. Ha megvan az elem, akkor egyszerűen visszaadnám az értékét, ha nincs, akkor bekerülne egy feldolgozandó objektumba / tömbbe, és minden egyes feldolgozás esetén végigmennék és, és az aktuális elem már fel lett dolgozva, akkor kivenném a feldolgozandók közül.Egyáltalán nem nehéz a
Jaja, én ezt hívtam referenciának. Amúgy érdemes csinálni feldolgozás közben egy függőség alapú referenciát is. Mondjuk ha "a" függ "b"-től meg "c"-től, akkor lehet csinálni egy map-et valahogy így: {b: ["a"], c: ["a"]}, és ha bekerül a "b" vagy a "c" elem a referenciába, akkor ki lehet törölni a függőségekből, ha meg egy elemnek elfogyott az összes függősége, akkor az feldolgozásra kerül, és szintén bekerül a referenciába. Így nem kell a végén a rendezéssel foglalkozni, hanem feldolgozás közben lehet nézni az ilyesmit. Azt hiszem csinálok három változatot, az egyik addig iterál a queue-n a végén, amíg el nem fogynak az elemek, a másik rendezi a queue-t függőségek szerint, a harmadik meg menet közben nézi a függőségeket, és úgy dolgoz fel. Kíváncsi vagyok, hogy a három változat közül melyik a legátláthatóbb és melyik a leggyorsabb...
No megtákoltam az utólagos
tesztek: qunit
Még lehetne tákolni rajta, hogy minden objektum dependency injectionnel kerüljön a helyére...
Formázási tanács
,
után mindig rakj szóközt, mert a következő könnyen azonosnak olvasható:Öö hát ez szövegszerkesztő
A rendezést lehet tovább
A fánál egyébként valami
Hack
Kérdés, hogy a coffeescriptet
pl: mootools-ban new Class() -el hozol létre osztályt, prototype-ban és jquery-ben Class.create()-el, stb...
Mindenesetre a fenti kódot majd refaktorálom úgy, hogy egy általánosabb minta jöjjön ki belőle. Olyan helyeken lehet felhasználni, ahol bonyolultabb adatszerkezetet kell generáltatni, mondjuk bonyolultabb regexek generáltatásánál, vagy összetettebb sablonoknál.
coffeescript
Ahm, akkor úgy néz ki, hogy
Csak halkan jegyzem meg, hogy
pl: