2013-04-24 3 views
4

Мне нужно заполнить два словаря.Как слить 2 словаря

Код:

private Dictionary <int, aor.PhysicalObject> agents; 
private Dictionary <int, aor.PhysicalObject> objects; 

agents = (from a in log 
        .InitialState 
        .Agents 
        .Agent 
     select a) 
     .ToDictionary(d => Convert.ToInt32(d.id) 
         , d => d as aor.PhysicalObject); 

objects = (from o in log 
        .InitialState 
        .Objects 
        .Object 
      select o) 
      .ToDictionary(d => Convert.ToInt32(d.id) 
         , d => d as aor.PhysicalObject); 

То, что я хочу сейчас, один словарь, содержащий все элементы агентов & объектов, словарь.

Возможно, вы столкнулись с проблемой дублирования ключей, но каждый ключ (id) уникален, поэтому проблем не возникнет.

Было бы здорово, если бы эта задача могла быть выполнена только с помощью одного запроса LINQ.

+0

возможно дубликат [Объединение словарей в C#] (http://stackoverflow.com/questions/294138/merging-dictionaries-in-c-sharp) –

ответ

1

Предоставленные ключи уникальны вы могли бы объединить два словаря следующим образом:

// Код

private Dictionary <int, aor.PhysicalObject> merger; 

merger = Enumerable 
     .Concat( from a in log 
          .InitialState 
          .Agents 
          .Agent 
        select a 
       , from o in log 
           .InitialState 
           .Objects 
           .Object 
        select o 
       ).ToDictionary(d => Convert.ToInt32(d.id) 
           , d => d as aor.PhysicalObject); 
+2

Зачем вам писать эти запросы LINQ вместо прямого использования 'log.InitialState.Agents.Agent' и' log.InitialState.Objects.Object'? – svick

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