none
Dictionary, Suche Key -> Value RRS feed

  • Frage

  • Hallo,

    welche Möglichkeiten der direkten Suche habe ich?

    ContainsKey

    Was bietet sich gut an?

    Grüße Oliver

    IDictionary<int, string> myDictionary = new Dictionary<int, string>();
                if (File.Exists(explanationFile))
                {
                    database = XDocument.Load(explanationFile);
                    var data = database.Descendants("def")
                        .ToDictionary(
                            el => (int)el.Attribute("number"),
                            el => (string)el.Attribute("textForOperator")
                        );
    
                    foreach (var kvp in data)
                        Trace.WriteLine(String.Format("Key: {0}, Value: {1}", kvp.Key, kvp.Value));
         
                    List<XElement> defs = database.Root.Elements("def").ToList();
                     XElement element = database.Root.Element("headline");
                    reason4 = element.Value;
    
                    foreach (XElement def in defs)
                    {
                        int number = Convert.ToInt32(def.Attribute("number").Value);
                        string name = def.Attribute("textForOperator").Value;
                        myDictionary.Add(number, name);
                    }
                  
    
                    if (myDictionary.ContainsKey(722003005) == true)
                    {
                        reason5 = myDictionary[722003005];
                    }

    Dienstag, 9. Juli 2013 13:48

Antworten

  • Hallo, du hast verschiedene Möglichkeiten um das Dictionary zu durchsuchen. Einerseits kannst du mit der ContainsKey-Methode auf einen bestimmten Schlüssel prüfen und dann mithilfe des Indexers (data[key])auf das Element zugreifen. Dies lohnt sich aber nur wenn du auf bestimmte Schlüssel prüfen willst.

    Wenn du alle Paare haben willst, die einen bestimmten Teilschlüssel enthalten, dann musst du alle Paare durch gehen und zu einer neuen Liste hinzufügen oder mit LINQ arbeiten:

    var v = (from x in data
             where x.Key > 1000000000
             select x);

    Bei Zahlen kannst du nur den Bereich bestimmen, wenn du aber mit strings arbeiten würdest, könntest du auch noch folgende Methoden nutzen:

    • Contains
      Ist eine Bestimmte Teilnummer enthalten?
    • StartsWith
      Beginnt die Nummer mit...?
    • EndsWith
      Endet die Nummer mit...?
    • Du kannst einzelne Zeichen der Nummer prüfen

    Auf jeden Fall bekommst du mit obigem LINQ immer wieder das Paar zurück. Wenn du aber nur die Value's haben möchtest, dann musst du die select-Klausel anpassen:

             select x.Value

    Dadurch wird auch wirklich nur eine Liste der Value's zurück gegeben.

    Natürlich steht es dir frei auch in den Value's zu suchen, aber das ist nicht ganz der Sinn von einem Dictionary.


    <Code-13/>- Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets
    Wenn die Frage beantwortet ist, dann markiert die hilfreichsten Beiträge als Antwort und bewertet die Beiträge. Danke.
    Einen Konverter zwischen C# und VB.NET Code gibt es hier.


    Dienstag, 9. Juli 2013 14:16
    Moderator
  • Hallo Oliver,

    um zu Prüfen ob ein Schlüssel in einem Dictionary vorhanden ist, ist ContainsKey die richtige Methode. Solltest du aber noch den Value dazu holen wollen, würde ich dir zu TryGetValue raten.


    Viele Grüße Holger M. Rößler

    • Als Antwort markiert Oliver Stippe Dienstag, 9. Juli 2013 17:36
    Dienstag, 9. Juli 2013 14:22

Alle Antworten

  • Hallo, du hast verschiedene Möglichkeiten um das Dictionary zu durchsuchen. Einerseits kannst du mit der ContainsKey-Methode auf einen bestimmten Schlüssel prüfen und dann mithilfe des Indexers (data[key])auf das Element zugreifen. Dies lohnt sich aber nur wenn du auf bestimmte Schlüssel prüfen willst.

    Wenn du alle Paare haben willst, die einen bestimmten Teilschlüssel enthalten, dann musst du alle Paare durch gehen und zu einer neuen Liste hinzufügen oder mit LINQ arbeiten:

    var v = (from x in data
             where x.Key > 1000000000
             select x);

    Bei Zahlen kannst du nur den Bereich bestimmen, wenn du aber mit strings arbeiten würdest, könntest du auch noch folgende Methoden nutzen:

    • Contains
      Ist eine Bestimmte Teilnummer enthalten?
    • StartsWith
      Beginnt die Nummer mit...?
    • EndsWith
      Endet die Nummer mit...?
    • Du kannst einzelne Zeichen der Nummer prüfen

    Auf jeden Fall bekommst du mit obigem LINQ immer wieder das Paar zurück. Wenn du aber nur die Value's haben möchtest, dann musst du die select-Klausel anpassen:

             select x.Value

    Dadurch wird auch wirklich nur eine Liste der Value's zurück gegeben.

    Natürlich steht es dir frei auch in den Value's zu suchen, aber das ist nicht ganz der Sinn von einem Dictionary.


    <Code-13/>- Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets
    Wenn die Frage beantwortet ist, dann markiert die hilfreichsten Beiträge als Antwort und bewertet die Beiträge. Danke.
    Einen Konverter zwischen C# und VB.NET Code gibt es hier.


    Dienstag, 9. Juli 2013 14:16
    Moderator
  • Hallo Oliver,

    um zu Prüfen ob ein Schlüssel in einem Dictionary vorhanden ist, ist ContainsKey die richtige Methode. Solltest du aber noch den Value dazu holen wollen, würde ich dir zu TryGetValue raten.


    Viele Grüße Holger M. Rößler

    • Als Antwort markiert Oliver Stippe Dienstag, 9. Juli 2013 17:36
    Dienstag, 9. Juli 2013 14:22