2013-04-08 3 views
-1

У меня есть что-то вроде этого:Словарь словарей, как получить значение?

private IDictionary<A, IDictionary<B, C>> data; 

, и я хочу сделать что-то вроде:

IDictionary<B, C> values = new Dictionary<B, C>(); 
values = Data.Values; 

как бы я в Java, но это не работает. Я не могу понять. Спасибо за помощь

ошибка:

Не может неявно преобразовать тип ICollection> в IDictionary

+1

Что не работает? Вы получили сообщение об ошибке? –

+0

'data [key1] [key2]' – Romoku

+0

Попробуйте это values ​​= Данные [A]; должен работать –

ответ

1

Если вы не уверены в том, что выйдет, попробуйте использовать тип-вывода

var coll = data.Values; 

Затем попробуйте ввести Collection с помощью foreach -loop для доступа к отдельным словарям.

foreach(var dic in coll){ 
//work on Dictionary 
} 

См. here для справки.

+0

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

+0

Да, это правда! –

2

Вы бы еще назвать .Values, но он возвращает ValueCollection, а не список. Для того, чтобы получить только значения, а не список пар ключ/значение, используйте Select:

List<C> values = data.Values.Select(x => x.value); 

http://msdn.microsoft.com/en-us/library/ekcfxy3x.aspx

+0

Да, и как я могу использовать ICollection для IDictionary? есть метод ToDictionary, но я действительно не знаю, как его использовать –

+0

Вы хотите пойти в * другом * направлении? Вам понадобится способ создания ключей для каждого из элементов вашего «ICollection» для ввода в словарь. –

+0

data.Values ​​является общим, это нельзя использовать –

0

Вы пытаетесь получить доступ к ICollection вашего IDictionary<B, C>, который не будет работать, так как в коллекции есть много Словари.

Если вы хотите отобразить все словари вниз, то вы можете использовать Lookup:

IDictionary<A, IDictionary<B, C>> data; 
var values = data.ToLookup(d => d.Value.SelectMany(d => d.Key), d => d.Value.SelectMany(d => d.Value)); 

Который даст вам несколько ключей к нескольким значениям.

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