Benutzer mit den meisten Antworten
Dictionary, Suche Key -> Value

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]; }
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.- Bearbeitet Tom Lambert (Koopakiller)Moderator Dienstag, 9. Juli 2013 14:45 Ergänzung
- Als Antwort markiert Oliver Stippe Dienstag, 9. Juli 2013 17:36
- Contains
-
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
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.- Bearbeitet Tom Lambert (Koopakiller)Moderator Dienstag, 9. Juli 2013 14:45 Ergänzung
- Als Antwort markiert Oliver Stippe Dienstag, 9. Juli 2013 17:36
- Contains
-
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