NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
balaz.marek94:27.9.2017 21:10

Zdravím, nedávno som narazil na zaujímavý problém, ktorý sa mi nepodarilo úplne vyriešiť podľa mojich predstáv, keďže nemám dostatočné znalosti v C#. Rád by som ho pre lepšie pochopenie zobrazil na nasledujúcom príklade.

Vytvoril som si pomocnú triedu T.

class T
{
    public int Number { get; set;  }
    public T()
    {
        Number = 5;
    }
}

Ďalej v Main mám kolekciu vyššie uvedenej triedy a zároveň pomocnú premennú pom triedy T.

List<T> list = new List<T>();
T pom;

Po naplnení kolekcie sa bude viackrát opakovať tento foreach, v ktorom vždy vyberiem jeden prvok kolekcie, na ktorý sa bude odkazovať pom.

foreach(T t in list)
{
   if (t.Number == 10)
   {
       pom = t;
       break;
   }
}

Problém nastáva, keď chcem aby pom potom ukazovala na iný prvok (predchádzajúci prvok, na ktorý pom ukazuje sa prepíše).

Problém sa mi podarilo vyriešiť tak, že miesto foreach som použil for a pamätal som si index vybraného prvku. Avšak tu sa program musí vždy odvolávať na daný index v kolekcií. Dá sa tento problém vyriešiť nejak efektívnejšie? :-)

 
Odpovědět
27.9.2017 21:10
Avatar
Odpovídá na balaz.marek94
Marian Benčat:27.9.2017 21:58

Absolutně nechápu, co se snažíš říct touto větou:

Problém nastáva, keď chcem aby pom potom ukazovala na iný prvok (predchádzajúci prvok, na ktorý pom ukazuje sa prepíše).

Nahoru Odpovědět
27.9.2017 21:58
Totalitní admini..
Avatar
Marian Benčat:27.9.2017 22:00

Jako jediné co mě napadá je (ale nedává to smysl vzhledem k tomu, co si napsal),, že se snažíš o něco takovéhoto.

foreach(t in list) {
 t = ... ;
}

Neboli změnit prvek pole ve foreach cyklu, je tomu tak?

Nahoru Odpovědět
27.9.2017 22:00
Totalitní admini..
Avatar
Jirka Jr
Člen
Avatar
Jirka Jr:28.9.2017 15:41

jestli to správně chápu, tak si potřebuješ zpětně pamatovat víc než jeden prvek

a proměnná pom samozřejmě může držet jen jeden;

to pak hodně záleží, co vlastně chceš s těmi zapamatovanými prvky dělat

tj.

  • v jakém pořadí je pak zpracováváš ... (od posledního k prvně zapamatovanému bych použil zásobník)
  • jestli si chceš zapamatovat třeba max 5 prvků, nebo prostě tolik, kolik jich v cyklu nasbíráš (pro pevný počet 5 stačí T pom[5], jinak je třeba použít List, Stack, nebo jinou vhodnou strukturu)
  • atd. atd.

takže můžeš nějak popsat co s těmi posbíranými prvky pak chceš dělat?

 
Nahoru Odpovědět
28.9.2017 15:41
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.