2010-09-17 5 views
1

Я задал аналогичный вопрос ранее в течение недели, но я не думаю, что мое первоначальное описание проблемы было очень последовательным, поэтому я снова пытаюсь.Сравнивая два словаря словарей

У меня есть следующие словари:

public Dictionary<string, List<DateTime>> 1stDict = new Dictionary<string, List<DateTime>>(); 

Dictionary<string, Dictionary<DateTime, double>> 2ndDict= new Dictionary<string, Dictionary<DateTime, double>>(); 

Мне нужно создать третий словарь

Dictionary<string, Dictionary<DateTime, double>> 3rdDict= new Dictionary<string, Dictionary<DateTime, double>>(); 

Содержащие Словари со значениями из 2ndDict где DateTime не существует в 1stDict.

Я сделал некоторые попытки, используя вложенные инструкции foreach, но не повезло.

Любые советы?

Спасибо, Брайан.

+0

Вы используете словарные ключи в качестве индексаторов в этом словаре, или просто сохраняете ключ и значение вместе, чтобы иметь пару точек данных? Если это так, вы хотите посмотреть на Tuple, может быть, это будет легче понять. –

+0

Как вы относитесь к неповторимой природе DateTimes? IOW - если второй содержит ["ab", ['12/26/2000 ', 7.43]] и [cd, ['12/26/2000', 9.92]] и 1-й не содержит ['12/26/2000 '] где-нибудь, какую из двух пар вы выбираете? – arootbeer

+2

Хмммм, смешная объектная модель, любой шанс превратить эти словари в реальные объекты со значимыми именами? – Juliet

ответ

3
var thirdDict = secondDict.ToDictionary(
    x => x.Key, 
    x => x.Value.Keys.Except(firstDict[x.Key]).ToDictionary(y => y, y => x.Value[y])); 
+0

Потребовал мне минуту, чтобы понять, как это работает, но это правильно. Хорошая работа заключается в том, чтобы понять это ... –

+0

Хотя я согласен с тем, что лучше использовать другой подход (как упоминается в комментариях по этому вопросу), это отвечает на фактический вопрос, который был задан. +1 –

+0

В этом примере я бы поставил это внутри foreach и перебирал через каждый словарь с ним? – Brian