2015-03-22 5 views
1

у меня есть 2 списка и 1 словарь:Заполните словарь со списками

List<string> A; 
List<string> B; 
Dictionary<string, string> AB; 

Я хотел бы, чтобы заполнить словарь с 2-х списков, где значение каждого элемента будет имя списка, где речь идет о из.

Например:
("from list A", "A")
("from list A", "A")
("from list B", "B")

Путь я это долго, и я хотел бы более каверзный решение:

//Loop on A 
    foreach (string item in A) 
    { 
     AB.Add(item, "A"); 
    } 

//Loop on B 
foreach (string item in B) 
    { 
     AB.Add(item, "B"); 
    } 

Любые идеи?

+0

Почему это так сложно об этом решении и что вы ищете в решении от нас? –

+2

'' Я хотел бы получить более сложное решение "' - Почему бы вам это на Земле? «Отладка в два раза сложнее, чем запись кода в первую очередь. Поэтому, если вы пишете код настолько умно, насколько это возможно, вы по определению недостаточно умны, чтобы его отлаживать». - Брайан Керниган – David

+1

@GrawCube - нет, это все те же самые собеседники. Тем не менее, различный торт. –

ответ

1

Вы можете, конечно, использовать Linq:

var AB = A.Select(e => new { Key = e, Value = "A" }).Union(
     B.Select(e => new { Key = e, Value = "B" })) 
     .ToDictionary(e => e.Key, e => e.Value); 

Но это не все, что гораздо короче или понятнее.

2

Ваше решение выглядит достаточно хорошо, как есть!

Если вы стремитесь достичь более короткий код, вы можете использовать List.ForEach расширение как в:

A.ForEach(x => AB.Add(x, "A")); 
B.ForEach(x => AB.Add(x, "B")); 

Ох, и вы можете рассмотреть вопрос о инициализации словаря с суммой графов списки элементов.

+0

Пожалуйста, объясните значение инициализации словаря указанным размером в этом экземпляре. Я не вижу никого. – Lathejockey81

+0

@ user4699981, спасибо !!!, я поддержал. См. Комментарий выше. – user3165438

+0

@ Lathejockey81. Инициализируя диктатор с указанным размером, вы гарантируете, что не будет никаких операций изменения размера, выполненных над методом .Add. Проверьте конструктор [Dictonary (Int32)] (https://msdn.microsoft.com/en-us/library/tk84bxf4 (v = vs.110) .aspx). –

Смежные вопросы