IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

Diskusia – 2. diel - Zoznam (List) pomocou poľa v C#

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Avatar
relycanx
Člen
Avatar
relycanx:30.3.2013 12:17

chtěl bych se zeptat, co u tohodle příkazu "int cislo = list.Find(a => a > 25);" znamená to "a", protože pokud to je nějaká proměnná, tak jí tu z nějakého důvodu ani nemusíme deklarovat, což třeba u cyklu FOR neplatí. Děkuji.

Editované 30.3.2013 12:18
 
Odpovedať
30.3.2013 12:17
Avatar
relycanx
Člen
Avatar
relycanx:2.4.2013 15:05

Když vytvořím pomocí listu databázi objektů, tak podle jakého příkazu můžu poté hledat určitý objekt? Našel jsem příkaz GetType(), jenže když jsem měl databázi zaměstnanců s atributy jméno a věk a i metodou ToString() (opravdu na klasický objekt, bez použití listu fungovala), tak mi to vypsalo jen nesmyslně název balíčku a třídy za tečkou, jakoby tam to ToString() vůbec nebylo. V čem jsem prosím udělal chybu? a dá se hledat objekty i podle atributů, nebo klíčových slov, které obsahuje, aby mi ho to prostě pak našlo a vypsalo, jako pomocí ToString()? :)

 
Odpovedať
2.4.2013 15:05
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovedá na relycanx
Petr Nymsa:2.4.2013 15:33

K prvnímu dotazu ->

a => a > 25

je lambda výraz. Info nalezneš zde v tutoriálech.

K druhému dotazu. Nějak jsem nepochopil co přesně chceš ?
Máš třídu Zaměstnanec, která má atributy jméno, věk,... ?
Máš List zaměstanců a potřebuješ najít například pouze zaměstnance s věkem vyšším 15 let ?

Pošli i ukázku kódu s překrytým ToString()

Editované 2.4.2013 15:33
Odpovedať
2.4.2013 15:33
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
relycanx
Člen
Avatar
relycanx:2.4.2013 15:44

Tak tady zasílám tělo programu a chtěl bych například napsal slovo "Petr" a aby mi to vypsalo nějakým způsobem celý objekt stejným způsobem, jako to dělá příkaz "Console.Write­Line(zamestna­nec[0]);". Abych třeba díky tomu zjistil i věk a další údaje. Jako určitě by asi šlo něco sesmolit přes podmínku If, ale určitě existuje nějaký příkaz na jednodušší hledání ne? :)

namespace ConsoleApplication1
{
class HlavniTr
{

static void Main(string[] args)
{

List<Zamestnanec> zamestnanec = new List<Zamestna­nec>();

zamestnanec.Add(new Zamestnanec("Pe­tr",24));
zamestnanec.Add(new Zamestnanec("Ka­rel", 35));

Console.Write­Line(zamestna­nec[0]);
Console.Write­Line();
Console.Write­Line(zamestna­nec[1]);

Console.ReadKey();
}

}
}

//---------------------------------------třída Zamestnanec
namespace ConsoleApplication1
{
class Zamestnanec
{

private string jmeno;
private int vek;

public Zamestnanec(string jmeno, int vek)
{
this.jmeno = jmeno;
this.vek = vek;
}

public override string ToString()
{
return String.Format("Jme­no:{0}\nVek:{1}",jme­no,vek);
}
}
}

Editované 2.4.2013 15:46
 
Odpovedať
2.4.2013 15:44
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovedá na relycanx
Petr Nymsa:2.4.2013 16:00

Využívej prosím tlačítka odpovědět a pro kód tu máme tlačítko vloži kód (2.zprava ;) ). Stále tápám v tvém komentáři na co se ptáš ;( . Překrytí metody ToString ti zajistí (velmi zjednodušeně) vlastní vypasání daného objektu.

Každopádně chápu tě tak ,že uživatel zadá třeba "Petr" a ty chceš najít všechyn zaměstnance, kteří se jmenují Petr. Bude potřeba udělat minimálně atribut, tedy

public string jmeno;

to je ovšem mírně ošklivé, ale pro tvoje účely zatím postačí, hezčí řešení například

// vlastnost
public string Jmeno {get; set;}

// nebo metoda
public string VratJmeno()
{
   return jmeno;
}

Tady je výsledný kód pro hledání jmen

// Zjednodušený kód
List<Zamestanec> firma; // seznam všech zaměstannců
string hledan=Console.ReadLine(); // hledaný člověk

// vrátí nový list všech zaměstanců s hledaným jménem
List<Zamestnanec> vyber=firma.FindAll((x)=> x.jmeno == hledan);
Editované 2.4.2013 16:02
Odpovedať
2.4.2013 16:00
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
relycanx
Člen
Avatar
Odpovedá na Petr Nymsa
relycanx:2.4.2013 16:49

To se omlouvám, příště to budu dělat přes ty tlačítka :) a dík moc, přesně tohle jsem potřeboval :)

 
Odpovedať
2.4.2013 16:49
Avatar
Kit
Tvůrce
Avatar
Odpovedá na Petr Nymsa
Kit:2.4.2013 16:55

Asi tě pozlobila malá/velká písmenka.

List<Zamestnanec> vyber=firma.FindAll((x)=> x.Jmeno == hledan);

Stejně tyto zvyklosti nechápu. Objekty malými, vlastnosti velkými. Co když je vlastnost objektem? Bude začínat malým nebo velkým písmenem?

Odpovedať
2.4.2013 16:55
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovedá na Kit
Petr Nymsa:2.4.2013 17:03

to x.jmeno jsem vztáhnul přímo k jeho příkladu a ke špatnému použití public string jmeno. Správněji to máš samozřejmě ty :). Vlastnosti a metody vždy píšu velkým písmenem a atributy,parametry malým. Dále používám velbloudí notaci, používání _ mi absolutně nevyhovuje a nelíbí se mi :)

Odpovedať
2.4.2013 17:03
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Kit
Tvůrce
Avatar
Odpovedá na Petr Nymsa
Kit:2.4.2013 17:12

Díky za vysvětlení. Přece jen zvyklosti z Javy jsou pro mne přijatelnější. V C# je na můj vkus těch velkých písmen nějak moc. Pascalská i velbloudí notace jsou OK, podtržítka také nemám moc v oblibě.

Trochu mi uniká rozdíl mezi vlastností a atributem.

Odpovedať
2.4.2013 17:12
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovedá na Kit
Petr Nymsa:2.4.2013 17:14

No trochu jsem to pojmenoval špatně. Napíšu příklad a snad to bude jasný

class NejakaTrida
{
   private int cislo;
   public string Jmeno {get; set;}
}
Odpovedať
2.4.2013 17:14
Pokrok nezastavíš, neusni a jdi s ním vpřed
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zatiaľ nikto nevložil komentár - buď prvý!