Zajmuję się tworzeniem aplikacji w C# kierowania .NET 3.5. Mam w nim 2 podobne słowniki, które zawierają kryteria sprawdzania poprawności dla określonego zestawu elementów w mojej aplikacji. Oba słowniki mają identyczne podpisy. Pierwszy słownik ma ustawienia domyślne, a drugi słownik zawiera pewne ustawienia zdefiniowane przez użytkownika.C# Scalanie 2 słowników
var default_settings = new Dictionary<string, MyElementSettings>();
var custom_settings = new Dictionary<string, MyElementSettings>();
Chciałbym połączyć dwa słowniki w taki, który zawiera elementy obu słowników.
Problem, na który napotykam, jest możliwe dla obu słowników o tych samych kluczowych wartościach. Podstawową zasadą, której chcę, jest posiadanie kombinacji zarówno słownika, jak i jeśli istnieją jakieś klucze w custom_settings, które już istnieją w default_settings, wartość custom_settings nadpisze wartość default_settings. Najlepszym rozwiązaniem jest po prostu pętla foreach, sprawdź, czy klucz istnieje w innym słowniku, a jeśli nie, dodaj go.
foreach (var item in custom_settings)
{
if (default_settings.ContainsKey(item.Key))
default_settings[item.Key] = item.Value;
else
default_settings.Add(item.Key, item.Value);
}
Zrobiłem kilka podstawowych zapytań LINQ, ale wciąż pracuję nad uczeniem się bardziej zaawansowanych rzeczy. Widziałem kilka zapytań, które połączą 2 słowniki, ale większość z nich wymaga grupowania dowolnego elementu z duplikatami kluczy, lub zwraca tylko kolekcję z duplikatami kluczy/Czy istnieje zapytanie lub wyrażenie LINQ, które będzie naśladować zachowanie pętli foreach Ja używam?
+1 do punktu # 2 (http://msdn.microsoft.com/en-us/library/k7z0zy8k.aspx) – Brad
+1 do nauczania mi coś, czego nie wiem. Jestem stosunkowo samoukiem z C# i nigdy nie wiedziałem, że możesz to zrobić za pomocą słowników. – psubsee2003
@ psubsee2003: Pozdrawiam. Jestem prawie pewien, że użyłem tego samego wzoru co twój kod, zanim odkryłem, że jest zbędny (przez przypadek, kręcił się z reflektorem). – Ani