2015-10-31 1 views
0

У меня есть следующие данные, которые я хочу определить элегантным способом и быстрым доступом.Как определить и получить доступ к вложенным данным словаря в нескольких пространствах имен C#

Dictionary<string, string> myDictionary = new Dictionary<string, string> 
{ 
    {"a", "1"}, 
    {"b" "2"} 
}; 

Теперь «1» и «2» определены в 2 разных модулях x и y. Я думаю о вложенном словаре здесь. Я ищу элегантный способ определить.

Мое мышление:

//FileA - Namespace1 
    Dictionary<string, string> dcA = new Dictionary<string, string> 
    { 
     {"LOC1", "ADDR1"}, 
     {"LOC2", "ADDR2"} 
    }; 

    //FileB - NameSpace1 
    Dictionary<string, string> dcB = new Dictionary<string, string> 
    { 
     {"LOC3", "ADD3"}, 
     {"LOC4", "ADD4"} 
    }; 

    //FileX - NameSpace 2 
    static Dictionary<string, string> dc1 = new Dictionary<string, Dictionary<string, string>> 
    { 
     {"LOC1", dcA.GetValue("LOC1"}, 
     {"LOC2", dcA.GetValue("LOC2"}, 
     {"LOC3", dcA.GetValue("LOC3"}, 
     {"LOC4", dcA.GetValue("LOC4"}, 
    }; 

    string myString; 
    string key = "LOC1"; 
    if (!dc1.TryGetValue(key, out myString)) 
    { 
     throw new InvalidDataException("Can't find the your Addr for this LOC"); 
    } 
    Console.WriteLine("myString : {0}", myString) 

    //Expected output as 
    myString : ADDR1 

Да я хочу, чтобы объединить 2 словаря в новый словарь. Проблема в том, что я могу получить доступ к значению нового словаря, такого как dcA.GetValue («LOC1»). Попытка выяснить, есть ли лучшее решение или структура данных, о которых я вообще не думаю.

+0

Я не совсем уверен, что вы здесь просите. – kskyriacou

+0

Итак, вы хотите совместить словарь A & B от Namespace1 в новом словаре в Namespace2? – Camo

+0

Да, я хочу объединить 2 словаря, которые будут объединены в новый словарь. Проблема в том, что я могу получить доступ к значению нового словаря, такого как dcA.GetValue («LOC1»). Попытка выяснить, есть ли лучшее решение или структура данных, о которых я вообще не думаю. – anotheruser

ответ

0

Вы можете сделать это 2 варианта

Вариант 1. // FileX -. NameSpace 2

Dictionary<string, string> dc1 = dcA; 

foreach (var item in dcB) 
{ 
    dc1[item.Key] = item.Value;  
} 

Вариант 2.

Dictionary<string, string> dc1 = new Dictionary<string,string>(); 

foreach (var item in dcA) 
{ 
    dc1[item.Key] = item.Value; 
} 
foreach (var item in dcB) 
{ 
    dc1[item.Key] = item.Value; 
} 

Вариант 1 будет быстрее, чем вариант 2. Поскольку в варианте 1 имеет только один для цикла и опции копирования 1-го словаря во время init.

+0

Я не уверен, как вы можете рекомендуем «вариант 1», поскольку OP не указал, нормально ли изменять исходные словари. –