从字典内的字典中获取键值对

时间:2014-09-15 08:14:01

标签: c# c#-3.0

我有神圣的

private Dictionary<int, Dictionary<string, int>> levelProgress;
 // LevelID -->[String][Progress] 

我想从嵌套字典中的第一个元素(存储字典)中获取键和值,但是我需要来自levelProgress [key]的字典,只需要它的第一个键,以及它的第一个值

 foreach (int key in levelProgress.Keys)
 {
     Dictionary<string, int> storedDictionary;
     if (levelProgress.TryGetValue(key, out storedDictionary))
     {

     }
 }

3 个答案:

答案 0 :(得分:3)

这是获取第一个键的方法:

var innerDictKvp = levelProgress[key].First();
var key = innerDictKvp.Key; 
var value = innerDictKvp.Value;

但是,您无法预测该密钥的内容 如果您有select键,则应该获取如下值:

var innerKey = "myKey";
var innerDictKvp = levelProgress[key].First(kvp => kvp.Key == innerKey);
var value = innerDictKvp.Value;

P.S。如果您不确定密钥是否存在,则应使用FirstOrDefault

修改:
对于不支持LINQ的旧版本.Net

var innerDict = levelProgress[key];
IEnumerator enumerator = innerDict.Keys.GetEnumerator();
enumerator.MoveNext(); // Get first item
var firstKey = enumerator.Current as string;
var firstVal = (int)innerDict[firstKey];

答案 1 :(得分:1)

 string secondDictionaryKey = "";
 string secondDictionaryValue = "";
 foreach (int key in levelProgress.Keys)
 {
     Dictionary<string, int> storedDictionary;
     if (!levelProgress.TryGetValue(key, out storedDictionary))
         continue;

     foreach(string k in storedDictionary.Keys)
     {
         secondDictionaryKey = k;
         secondDictionaryValue = storedDictionary[k];
         break;
     }

     break;               

 }

答案 2 :(得分:1)

你应该能够通过沿着这些方面做某事来在Linq中写出来

levelProgress.FirstOrDefault(x=>x.Key == key).Value.FirstOrDefault().Key;