Foreach u generického slovníku - C#

Honza

Foreach u generického slovníku - C#
« kdy: 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.
« Poslední změna: 04. 09. 2013, 13:32:35 od Roman Bořánek »


DK

Re:foreach u generickeho slovniku - C#
« Odpověď #1 kdy: 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>
}



Honza

Re:foreach u generickeho slovniku - C#
« Odpověď #2 kdy: 31. 08. 2013, 14:58:17 »
Ano, skutečně, funguje to.

Mnohokrát děkuji.
H.

Harald Hadson

Re:foreach u generickeho slovniku - C#
« Odpověď #3 kdy: 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>
}

DK

Re:foreach u generickeho slovniku - C#
« Odpověď #4 kdy: 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


eMko

  • ****
  • 456
    • Zobrazit profil
    • E-mail
Re:Foreach u generického slovníku - C#
« Odpověď #5 kdy: 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.

iwtu

Re:Foreach u generického slovníku - C#
« Odpověď #6 kdy: 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.

looser

Re:Foreach u generického slovníku - C#
« Odpověď #7 kdy: 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.

eMko

  • ****
  • 456
    • Zobrazit profil
    • E-mail
Re:Foreach u generického slovníku - C#
« Odpověď #8 kdy: 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.