Diskuze: Pomoc s List
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 22 zpráv z 22.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.


To tam máš, 3. parametr v tom cyklu:
arr.add(Arrays.asList(t.split("/")))
Vloží se tedy list do listu. Každopádně se mi ten kód ani trochu
nelíbí 
V Javě moc nedělám, ale zkusím to:
Vytvořím si 2 listy, první prázdný, druhý má v sobě Stringy vzniklé splitnutím toho dlouhého řetězce. Splituje se dle středníku, v řetězci jsou lomena, což mi trochu nesedí, ale předpokládám, že je v reálu ještě delší i se středníky.
Následuje příšerný cyklus, kde se iteruje druhý list (ten do kterého
se splitovalo). Nechápu, proč tam není foreach nebo se v Javě iteruje
takhle? To snad ne.
Každopádně iteruji druhý list a v každém kroku vložím do prvního listu
splitnutý String t, ten v každé iteraci obsahuje prvek druhého listu,
splitovaný dle lomítka.
Suma sumárum, dle mého názoru (ale klidně můžu kecat, tohle je fakt šílenost) to dělá následující:
Zadám takovýto string: "1/2/3;4/5/6;7/8/9" o on mi vrátí list se třemi prvky, kde každý prvek je list třech prvků. V závorkové notaci to vypadá takto: list(list(1, 2, 3), list(4, 5, 6), list(7, 8, 9)).
Pokud to takto opravdu funguje, je to příšerně napsané 
List v listu je celkem běžná záležitost - třeba v Lispu je to snad v každé aplikaci. Ovšem v daném případě to asi nebude správně.
Pojmenování seznamu "arr" vidím spíš jako matení nepřítele, použití "for" na procházení seznamu také. Split(";") na řetězci bez středníku je rovněž zajímavý. Nejlépe asi bude hledat příklady jinde.
Já nenarážím na list v listu, ale na způsob iterace, to je jak v
pravěku 
Ale když už o tom mluvíme, mám raději přehledné struktury, s Davidem máme v těch kvízech tady 4 rozměrné pole (PHPčkové pole, tedy seznam/list) a nikdo už neví, co je kde uložené. Kolují legendy, co který index značí, kdo ví. Každopádně kdybychom udělali raději list objektů, bylo by vše jasné. Čím déle programuji, tím více zjišťuji, jak je procedurální myšlení špatné.
Díky všem za pomoc a za jejich rady
Zítra se na to vrhnu.
To matesax: regulární výrazy, tohle už mi kdysi radil i sczdavos, ještě
jsem neměl čas se na to podívat, ale když to radí už druhej člověk tak
to bude asi dost podstatné 
To sdraco: no mě ani tak nešlo jak ten kód je napsanej, já to hlavně
potřeboval ke zjištění jedné informace která se blbě zjišťuje (bota v
Javě na browser hry dělá málo kdo
) a taky ten kód není získanej zrovna mírumilovnou cestou
Možná to ten decompiler jen
špatně přeložil (to se stává hodně často) ale kód přeloženej funguje
a mě šlo jen o princip 
To je dost možné, protože tohle fakt nevypadá na to, že by to psal
člověk
On se foreach v
reálu překládá na práci s iterátorem, to bude ono.
Regulární výrazy jsou zejména na práci se složitějšími podřetězci,
tady jsou jen 2 separátory, naopak by zde byly na škodu. Jedná se v podstatě
o jazyk v jazyku, interpretace je velmi časově náročná (vlastně se v
paměti postaví stroj na reg. výrazy). Zde stačí jen jednoduchý split v
cyklu. Nicméně jestli reguláry neumíš, určitě si znalosti doplň, jsou
velmi důležité 
Však právě. Zjistil jsem, že pracovat s listem v listu jako s dvourozměrným polem je blbost.
Pole v PHP jsou de facto seznamy a slovníky. Pracovat s tím jako s vícerozměrným polem je cestou do pekel. Už použití jednoduchého indexu u takového "pole" je podezřelé.
Tak si zkus udělat bez iterátoru tohle:
<?php
$pole=array();
$pole[1]="a ";
$pole[5]="b ";
foreach($pole as $item){
echo $item;
}
Netvrdím, že to nejde, ale je to pakárna.
Souhlasím, že regulární výrazy jsou na takovou trivialitu overkill. Přednost by měla mít metoda split().
Asi jsi mě špatně pochopil, myslel jsem, že se konstrukce foreach() ve zdrojovém kódu při kompilaci přeloží JavaC jako for cyklus, který pracuje s iterátorem. Proto se při dekompilaci již nepřeloží zpět.
Člověk samozřejmě používá foreach.
V tom případě se tedy skutečně jedná o dvourozměrný seznam. Mělo by se s ním tak i zacházet. Ovšem pokud potřebuji 8. prvek z 1. záznamu, zní dvojitý get docela logicky.
Já se zatím nikdy s Listem v Listu nikdy nesetkal tak mě to trochu
překvapilo 
Pochopil jsem tě správně, jen jsem ti uvedl příklad, kdy to tak kompilátor udělat nemůže. Schválně si to zkus s "for", není to žádná sranda.
Je však možné, že i autor to napsal "divně".
List v listu je častější, než by sis myslel. Adresářová struktura, soubor XML, ... Dokonce to mívá desítky úrovní zanoření a všechno jsou to jen seznamy v seznamech.
Co myslíte? Je to takhle lepší?
List arr = new ArrayList();
List tmpArr = Arrays.asList(content.split(";"));
for(Object s: tmpArr)
{
arr.add(Arrays.asList(((String) s).split("/")));
}
Jsem to jenom narychlo zkusil přepsat v tom dekompilovaném kódě. Ve své
přepsané verzi to přepíšu na genericitní typy 
Pořád si nerozumíme, měl jsem na mysli přeložení pro for cyklus, který si vezme iterátor objektu (zde pole, tedy seznamu) a volá na tomto iterátoru metodu next(). Ne for cyklus, který bude po jednom indexovat.
Takhle vnitřne funguje foreach, pole vystavuje objekt iterátor, který má getter na aktuální prvek a metodu next() pro posun na další. Ta nejlépe ví, jak to vnitřně zařídit a my ji jen voláme. Foreach konstrukce je jen syntactic sugar.
Na první pohled to vypadá dobře, na druhý jsem moc ospalý 
Zobrazeno 22 zpráv z 22.