2017-02-03 3 views
0

Ich habe ein paar SortedDictionaries. Ich weiß nicht wirklich, wie man einen bestimmten Wert daraus durch Benutzereingaben holt.Wählen Sie Werte aus dem Wörterbuch basierend auf Eingabe

ich hier Hinzufügen von Informationen zum Wörterbuch:

public SortedDictionary<int, List<double>> addqtyScrews() 
{ 
      qtyScrews.Add(5, new List<double>()); // key 5 
      qtyScrews[5].Add(0); 
      qtyScrews[5].Add(0.5); 
      qtyScrews[5].Add(1); 
      qtyScrews[5].Add(1.5); 
      qtyScrews[5].Add(4.5); 
      qtyScrews[5].Add(5); 
      qtyScrews.Add(6, new List<double>()); // key 6 
      qtyScrews[6].Add(0); 
      qtyScrews[6].Add(0.5); 
      qtyScrews[6].Add(1); 
      qtyScrews[6].Add(1.5); 
      qtyScrews[6].Add(2); 
      qtyScrews[6].Add(2.5); 
      qtyScrews[6].Add(3); 
} 

Funktion von dem, was ich will, gibt der Benutzer die gewünschten Schlüssel und Wert Werte:

public void Screws() 
{ 
    int kID = 5; // Key ID 
    double vID = 4.5; // Value ID 
    var SelectionScrews = qtyScrews.FirstOrDefault(x => x.Key == kID and y => y.Value == vID).Key; 
} // not correct code, but its what i want it to do pretty much. 

Wie mache ich das " und "Semesterarbeit hier?

+4

'&& x.Value.Contains (VID)' ' –

+0

qtyScrews.FirstOrDefault (KVP => kvp.Key == KID && kvp.Value.Any (v => v == VID)). Key' –

+0

i verstehe deinen Code nicht. Wenn Sie einen Schlüssel haben möchten, brauchen Sie keine Liste abzufragen, kID ist Ihr Schlüssel. Angenommen, Sie suchen nicht nach einem Schlüssel. Warum benutzt du dein Wörterbuch nicht? Warum nicht qtyScrews schreiben [kID] .FirstOrDefault (y => y.Value == vID)? –

Antwort

1

Die Antwort lautet:

var SelectionScrews = addqtyScrews().FirstOrDefault(x => x.Key == kID && x.Value.Contains(vID)).Key; 

jedoch vermuten, dass ich das, was Sie suchen ist:

var SelectionScrews = addqtyScrews().FirstOrDefault(x => x.Key == kID && x.Value.Contains(vID)).Value; 

beachten Sie, dass .Value statt .Key, letztere 5 zurück, ersteres der Liste von Werten.

Außerdem würde ich vorschlagen, die folgende kompaktere Notation für Objektinitialisierung mit:

qtyScrews.Add(5, new List<double>() { 0, 0.5, ...., 5 }); 
qtyScrews.Add(6, new List<double>() { 0, 0.5, ...., 3 }); 

so dass mit 2 Zeilen ersetzen Sie 10 Zeilen.

Verwandte Themen