2013-06-20 14 views
16

Chcę odfiltrować parę słowników, których nie potrzebuję do dalszego przetwarzania. Sprawdź ten przykładowy kod z:Jak mogę wyodrębnić podzestaw słownika na inny w C#?

static void Main(string[] args) 
{ 
    var source = new Dictionary<string, dynamic>(); 

    source.Add("number", 1); 
    source.Add("string1", "One"); 
    source.Add("string2", "Two"); 
    source.Add("string3", "Three"); 

    var onlyStrings = source.Where(s => s.Key != "number").ToDictionary(s => s.Key); 
} 

W tym przypadku onlyStrings jest Dictionary<string, KeyValuePair<string, object>>

ale chcę onlyStrings mieć następujące pary (podzbiór słownika źródłowego):

  • Key "string1", wartość: "One"
  • Klucz: "łańcuch2", wartość: "Two"
  • Klucz: "String3", wartość: "Three"

Jaki jest najlepszy sposób uzyskania takiego wyniku?

Odpowiedz

25

Jest przeciążenia metody ToDictionary który pozwala również na delegata elementSelector:

var onlyStrings = source.Where(s => s.Key != "number") 
         .ToDictionary(dict => dict.Key, dict => dict.Value); 
Powiązane problemy