Diskuze: c# dictionary

C# .NET .NET (C# a Visual Basic) c# dictionary American English version English version

Avatar
niderle.l
Člen
Avatar
niderle.l:

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. dubna 11:27
Avatar
Odpovídá na niderle.l
Martin Turner:

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. dubna 13:38
Avatar
niderle.l
Člen
Avatar
Odpovídá na Martin Turner
niderle.l:

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. dubna 16:23
Avatar
Odpovídá na niderle.l
Jakub Šárník:

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

 
Nahoru Odpovědět  +1 4. dubna 16:47
Avatar
niderle.l
Člen
Avatar
Odpovídá na Jakub Šárník
niderle.l:

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

 
Nahoru Odpovědět 4. dubna 17:58
Avatar
Odpovídá na niderle.l
Martin Turner:

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í
+1 bodů
Řešení problému
 
Nahoru Odpovědět 5. dubna 7:24
Avatar
niderle.l
Člen
Avatar
Odpovídá na Martin Turner
niderle.l:

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

 
Nahoru Odpovědět 6. dubna 7:28
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 7 zpráv z 7.