Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Honza 31. 08. 2013, 14:40:04

Název: Foreach u generického slovníku - C#
Přispěvatel: Honza 31. 08. 2013, 14:40:04
Dobrý den,
potřeboval bych, prosím, poradit, jak mám iterovat nýsledující kontejner:

Dictionary<string, Dictionary<DateTime, int>> zaznamy = new Dictionary<string, Dictionary<DateTime, int>>();

Potřeboval bych procházet "vnějším" slovníkem a získat jednotlivé "záznamy".

Neporadili byste mi někdo, prosím?

Děkuji
H.
Název: Re:foreach u generickeho slovniku - C#
Přispěvatel: DK 31. 08. 2013, 14:54:47
co toto? v c# sice nedelam, ale dle prikladu na internetu a dokumentace by to melo fungovat
Kód: [Vybrat]
foreach (KeyValuePair<string, Dictionary<DateTime, int>> iterator in zaznamy){
  iterator.Key; // string
  iterator.Value; // Dictionary<DateTime, int>
}


Název: Re:foreach u generickeho slovniku - C#
Přispěvatel: Honza 31. 08. 2013, 14:58:17
Ano, skutečně, funguje to.

Mnohokrát děkuji.
H.
Název: Re:foreach u generickeho slovniku - C#
Přispěvatel: Harald Hadson 07. 09. 2013, 20:27:53
co toto? v c# sice nedelam, ale dle prikladu na internetu a dokumentace by to melo fungovat
Kód: [Vybrat]
foreach (KeyValuePair<string, Dictionary<DateTime, int>> iterator in zaznamy){
  iterator.Key; // string
  iterator.Value; // Dictionary<DateTime, int>
}

pls pouzivajte type inference... ked nie koli sebe, tak aspon koli programatorom co ten kod budu po vas citat:

Kód: [Vybrat]
foreach (var iterator in zaznamy){
  iterator.Key; // string
  iterator.Value; // Dictionary<DateTime, int>
}
Název: Re:foreach u generickeho slovniku - C#
Přispěvatel: DK 08. 09. 2013, 00:13:04
co toto? v c# sice nedelam, ale dle prikladu na internetu a dokumentace by to melo fungovat
Kód: [Vybrat]
foreach (KeyValuePair<string, Dictionary<DateTime, int>> iterator in zaznamy){
  iterator.Key; // string
  iterator.Value; // Dictionary<DateTime, int>
}

pls pouzivajte type inference... ked nie koli sebe, tak aspon koli programatorom co ten kod budu po vas citat:

Kód: [Vybrat]
foreach (var iterator in zaznamy){
  iterator.Key; // string
  iterator.Value; // Dictionary<DateTime, int>
}

neprogramuju v c#, a propos, pro programatory bude lepsi vedet, co za typ je iterator
Název: Re:Foreach u generického slovníku - C#
Přispěvatel: eMko 08. 09. 2013, 07:59:17
Já v C# programuju; resp. programování v C# "brings a food on my table".

Použití var je preferovaná cesta. Nic se tím nezpomalí (type inference, tedy odhadnutí, co je proměnná za typ, proběhne při kompilaci stjeně tak i tak), ale kód se zkrátí, což přispěje k přehlednosti. Mám-li dictionary, ta proměnná bude vždy typu KeyValuePair. Pokud bude proměnná dictionary nazvaná nějak cypatě, (např. zaznamy), pak bude dost těžké hádat, co za typ má být klíč a hodnota; potom stačí najet kurzorem myši na "var" a ukáže se Ti přesný typ (min. pokud používáš ReSharper, což je téměř nutnost).

Pokud při psaní kódu dodržíš best practices, což bys stejně měl jinak pravděpodobně vznikne neudržovatelný bastl, není důvod var nepoužít.
Název: Re:Foreach u generického slovníku - C#
Přispěvatel: iwtu 08. 09. 2013, 20:54:28
ad1) Na take prkotiny sa pouziva google. Odpoved mas prinajhorsiom do minuty..
ad2) var vo foreach je bezna a preferovana cesta a pri dictionary obzlast.
ad3) Na typy sa velmi clovek nediva, ak nemusi (vacsinou su identifikatori nejako rozumne pomenovane. Ak nie su, mali by ! ! !). Ak musi, pouzije tooltip vo Visual Studiu.
Název: Re:Foreach u generického slovníku - C#
Přispěvatel: looser 08. 09. 2013, 21:25:46
Já v C# programuju; resp. programování v C# "brings a food on my table".

Použití var je preferovaná cesta. Nic se tím nezpomalí (type inference, tedy odhadnutí, co je proměnná za typ, proběhne při kompilaci stjeně tak i tak), ale kód se zkrátí, což přispěje k přehlednosti. Mám-li dictionary, ta proměnná bude vždy typu KeyValuePair. Pokud bude proměnná dictionary nazvaná nějak cypatě, (např. zaznamy), pak bude dost těžké hádat, co za typ má být klíč a hodnota; potom stačí najet kurzorem myši na "var" a ukáže se Ti přesný typ (min. pokud používáš ReSharper, což je téměř nutnost).

Pokud při psaní kódu dodržíš best practices, což bys stejně měl jinak pravděpodobně vznikne neudržovatelný bastl, není důvod var nepoužít.

preferovana cesta to neni:
http://msdn.microsoft.com/en-us/library/bb384061%28VS.90%29.aspx

However, the use of var does have at least the potential to make your code more difficult to understand for other developers.

I z prikladu je videt, ze nahrazenim konkretniho typu za var neni zrejme co se iteruje. Ne vzdy se kod prohlizi v IDE a ne vzdy je zabava krouzit mysi po monitoru.

Takze zkraceni ano, vetsi prehlednost ne.
Název: Re:Foreach u generického slovníku - C#
Přispěvatel: eMko 09. 09. 2013, 05:23:57
@Looser To, co odkazuješ, nejsou guidelines/best practices, ale technická dokumentace. To, že Tě technická dokumentace upozorní na riziko, že něco _může_ ..., neimplikuje, zda-li se jedná o preferovanou cestu či nikoliv. Technická dokumentace totiž neříká nic o preferovaných způsobech, ani to není její účel.

Chceš-li se o tom hádat, můžeme to udělat jinde - toto nesouvisí s původním příspěvkem.