2015-06-19 3 views
2

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

{"key1", list1} 
list1 = [Value 1 Value2, Value3] 

И у меня есть несколько ключей и, следовательно, значения, содержащие списки. Я хочу, чтобы отобразить его так, что он показывает

Key1: Value1 
Key1: Value2 
Key1: Value3 

Так что я хочу, чтобы иметь возможность отобразить ключ, а также значение. Но я не уверен, как это сделать.

foreach (var value in FoodCategory_Item.Values) 
{ 
    foreach(var item in value) 
    { 
     Console.WriteLine("Value of the Dictionary Item is: {0}", item); 
    } 
} 

Это то, что я до сих пор, что перебирать значения, которые я знаю, как это сделать, но я не уверен, как получить ключевые ценности в там же, потому что он будет перебирать все значения первое, а затем перебрать ключевые элементы ..

+3

Если вам тоже нужны ключи, не перебирайте значения «Значения» :) Просто перебирайте словарь (каждый элемент представляет собой пару значений ключа), а затем внутри него перебирает все значения для этого ключа. – crashmstr

ответ

2

Это должно работать:

foreach (KeyValuePair<string, List<string>> kvp in FoodCategory_Item) 
{ 
    foreach (string item in kvp.Value) 
    { 
     Console.WriteLine ("{0}: {1}", kvp.Key, item); 
    } 
} 

Dictionary реализует IEnumerable<KeyValuePair<TKey, TValue>>, так что вы можете перемещаться по нему непосредственно.

+0

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

+0

@ user3827175: Уверенная вещь, рада помочь –

1

Dictionary перечисляемость, так итерацию, что:

foreach (var kvp in FoodCategory_Item) 
{ 
    foreach(var item in kvp.Value) 
    { 
     Console.WriteLine("Value of the Dictionary Key {0} is: {1}", kvp.Key ,item); 
    } 
} 
2

Если вы посмотрите на documentation for Dictionary, вы заметите, что он реализует интерфейс

IEnumerable<KeyValuePair<TKey, TValue>> 

Таким образом, вы можете сделать следующее:

foreach(KeyValuePair<TKeyType, TValueType> kvp in dictionary) 
{ 
    foreach(var item in kvp.Value) 
    { 
     Console.WriteLine("{0}: {1}", kvp.Key, item); 
    } 
} 

В приведенном здесь примере кода заменить TKeyType с фактическим типом ключей, используемых в вашем словаре, и заменить TValueType с типом списка, используемым для значений словаря.