c# get-Wert Teilmenge aus dem Wörterbuch von keylist
Ok, so kann man einen einzelnen Wert von dictionary[key]
oder alle Werte durch dictionary.Values
.
Was ich Suche, ist ein Weg, um alle Werte für einen bestimmten Schlüssel festgelegt, so:
List<string> keys;
Dictionary<string, object> dictionary;
List<object> valuesForKeys = GetValuesFromDictionaryUsingKeys(dictionary, keys);
mit
private List<object> GetValuesFromDictionaryUsingKeys(Dictionary<string, object> dictionary, List<string> keys)
{
//your code here
}
Natürlich könnte ich das Durchlaufen von Hand über den Schlüssel-Liste und verwenden Sie dictionary[key]
jeder Zeit und fügen Sie alle Werte wieder auf einer Liste wieder, aber ich würde gerne etwas mehr elegante Weise (z.B. Linq).
Dank.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen
keys.Where(k => dictionary.ContainsKey(k)).Select(k => dictionary[k])
.k =>
im select-Anweisung. Also die Zeile sollte lauten:keys.Where(k => dictionary.ContainsKey(k)).Select(k => dictionary[k])
.Warum schreiben Funktion, wenn Sie können generische Erweiterungsmethode für den täglichen Gebrauch?
BEARBEITEN:
Als man schreiben kann:
ToList()
und nur die Rückkehr derIEnumerable<V>
und das wäre ja noch schöner und LINQy..Distinct()
auf diekeys
ersten.Versuchen:
oder, wie verlangt:
Verwenden .Schneiden zu entfernen, die Schlüssel nicht im Wörterbuch, deren schneller als ein
.Where(k => dictionary.ContainsKey(k))
.Entfernen .Intersect-Anweisung zu ermöglichen auslösen einer exception für einen Schlüssel nicht im Wörterbuch gefunden.
Rawling Antwort funktioniert einwandfrei, aber wenn Sie im Voraus wissen, die Schlüssel vorhanden sind, die auf das Wörterbuch, das kann sein, mehr klar und effizient:
keys.Select(k => dictionary[k])