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
Ladislav Niderle:4.4.2016 11:27

Ahoj, potřeboval bych poradit s prací se slovníkem.
Můj slovník vypadá následovně:

Dictionary<string, List<GroupeExtensionsSettings>> ListGroupeExtensions=new Dictionary<string, List<GroupeExtensionsSettings>>();

Slovník mám naplněný a ten list je následující:

public class GroupeExtensionsSettings
    {

        public string Extension;

        public GroupeExtensionsSettings(string _extension)
        {
            Extension = _extension;
        }

    }

Mám klíč, ale nevím jak provést cyklus přes ten list, který je pod tím klíčem pomocí foreach či jiných metod.

Nevěděl by mi prosím kdo poradit?
Předem moc děkuji

 
Odpovědět
4.4.2016 11:27
Avatar
Odpovídá na Ladislav Niderle
Martin Turner:4.4.2016 13:38

Ahoj,
pomohl by Ti následující příklad?

public void VypisSlovnik()
{
            Dictionary<string, List<string>> slovnik = new Dictionary<string, List<string>>();

            slovnik.Add("prvni", new List<string>(new string[] {"a", "b", "c"}));
            slovnik.Add("druhy", new List<string>(new string[] {"d", "e", "f"}));
            slovnik.Add("treti", new List<string>(new string[] {"g", "h", "i"}));

            string klic = "prvni";
            foreach(var item in slovnik["prvni"])
            {
                Console.WriteLine(item);
            }
            Console.ReadKey();
}
 
Nahoru Odpovědět
4.4.2016 13:38
Avatar
Odpovídá na Martin Turner
Ladislav Niderle:4.4.2016 16:23

Ahoj, jo takto mi to stačí, aspoň jsem si ověřil, že jsem to měl taky dobře udělané, ale takže mám bohužel problém s tím co jsem myslel že je v pohodě a tudíž načtení následujícího XML souboru:

<?xml version="1.0" encoding="utf-8"?>
<Settings>
  <GroupeExtensions>
    <NameGroupe>test 01</NameGroupe>
    <Extensions>
      <Ext>*.avi</Ext>
    </Extensions>
    <Extensions>
      <Ext>*.mkv</Ext>
    </Extensions>
    <Extensions>
      <Ext>*.mpeg</Ext>
    </Extensions>
  </GroupeExtensions>
  <GroupeExtensions>
    <NameGroupe>test 02</NameGroupe>
    <Extensions>
      <Ext>*.avi</Ext>
    </Extensions>
    <Extensions>
      <Ext>*.mkv</Ext>
    </Extensions>
    <Extensions>
      <Ext>*.mpeg</Ext>
    </Extensions>
  </GroupeExtensions>
</Settings>

GroupeExtensions = jednotlivé skupiny
NameGroupe = jméno skupiny (key ve slovníku)
Ext = přípony (prostě hodnoty)

A toto potřebuji načíst do slovníku, který jsem popsal výše.
Nevěděl by jsi ty nebo někdo jiný teda pomoci, jak to mám správně načíst? Snažím se používat k tomu LINQ.

Děkuji
 
Nahoru Odpovědět
4.4.2016 16:23
Avatar
Odpovídá na Ladislav Niderle
Neaktivní uživatel:4.4.2016 16:47

Jen taková poznámka, nemělo by tam místo "groupe" být "group"? :-D

Nahoru Odpovědět
4.4.2016 16:47
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Ladislav Niderle:4.4.2016 17:58

Ano je to velice pravděpodobné, děkuji za upozornění.

 
Nahoru Odpovědět
4.4.2016 17:58
Avatar
Odpovídá na Ladislav Niderle
Martin Turner:5.4.2016 7:24

A jak tedy soubor načítáš?
Možností je určitě několik, příklad může být tento:

XDocument soubor =XDocument.Load("TvujSoubor.xml");
IEnumerable<XElement> elementy = soubor.Element("Settings").Elements("GroupeExtensions");
foreach(XElement el in elementy)
{
    string klic = el.Element("NameGroupe").Value;
    IEnumerable<XElement> extensions = el.Elements("Extensions");
    List<string> hodnoty = new List<string>();
    foreach(XElement ext in extensions)
    {
        hodnoty.Add(ext.Element("Ext").Value);
    }
    slovnik.Add(klic, hodnoty);
}

Určitě je více postupů, jak z Xml dostat data.
Dej vědět zda se Ti to podařilo.
P.S.: třída XDocument je součástí namespace System.Xml.Linq

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
5.4.2016 7:24
Avatar
Odpovídá na Martin Turner
Ladislav Niderle:6.4.2016 7:28

Děkuji, toto je již funkční.

 
Nahoru Odpovědět
6.4.2016 7:28
Avatar
Marek Poner
Člen
Avatar
Marek Poner:3.4.2019 20:48

Dobrý den
Mám menší problém a nevím si s ním rady pomůžete mi prosím? Zadání je: "Vytvořte aplikaci na testování znalosti anglických slov. Aplikace vypíše náhodně české slovo ze slovníku a ohodnotí zapsané anglické." a vůbec nechápu co dělat. Náš učitel nám to nevysvětlil..

 
Nahoru Odpovědět
3.4.2019 20:48
Avatar
Odpovídá na Marek Poner
Ladislav Niderle:3.4.2019 21:19

Ahoj, na toto by asi mělo vzniknout samostatné vlákno, ale jinak jde o to, zda je to vše co se zadání týče nebo jsou ještě nějaká specifikace a má to být WinForm nebo konzolová aplikace. Jelikož je možnost si vytvořit slovník, kde klíč bude české slovíčko a hodnota správná anglická. Takto se dá slovník naplnit a následně pokud by se jednalo o WinForm, tak na tlačítko by se provedl random nad slovníkem, které by se vepsalo do labelu a pod ním by byl textbox, kde uživatel zapíše podle něj správně slovíčko a pak jen akci na tlačítko nebo enter, které by to porovnalo. To je asi nejjednodušší verze co by se dala udělat, Co se týče konzolové aplikace, tak tam by musel být nějaký cyklus while, který by fungoval do doby než by se třeba splila podmínka na písmeno "Q" nebo jiné předem definované a znázorněné uživateli. Jako další možnost je spíše následně nemít slovíčka přímo v programu, ale využít k tomu třeba XML soubor, který by se dal číst a následně pracovat. Proto je otázkou jak moc by to mělo být sofistikované. Doufám, že jsem aspoň trošku poradil, aspoň jak bych to dělal já. Kdyby něco, tak klidně napiš a snad by se dalo něco udělat, pokud to samozřejmě nepotřebuješ už na zítřek :).

 
Nahoru Odpovědět
3.4.2019 21:19
Avatar
Jaroslav Smrž
Tvůrce
Avatar
Odpovídá na Marek Poner
Jaroslav Smrž:4.4.2019 11:42

Ahoj, předpokládám, že generování randomu máš vyřešené a jde ti jen o porovnání a výstup. Nevím, kolik slovíček má zadání obsahovat, ale pokud jde jen o cíl a slovíček nebude příliš, tak bych si vytvořil pole, kde klíči budou česká slovíčka a hodnota bude anglické slovíčko. Při výpisu bych zobrazil pouze klíč a textbox. Po validaci tlačítkem bych porovnal hodnotu textboxu a hodnotu indexu pole. Pak záleží, jaký chceš výstup, jestli pouze true/false nebo třeba procentuální shodu znaků. Pokud procenta, tak by bylo lepší použít databázi, neboť SQL dotazy udělají spoustu práce za tebe. Dej vědět přesná specifika zadání (technologie, obsah slovníku, rozšiřitelnost atd.) a snad ti můj názor bude k něčemu.

Nahoru Odpovědět
4.4.2019 11:42
/* Life runs on code */
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 10 zpráv z 10.