繁体   English   中英

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

[英]get key value pair from a dictionary inside a dictionary

我有认识

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))
     {

     }
 }

这是获取第一把钥匙的方法:

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

但是,您无法预测该键将是什么。
如果您具有选择键,则应获取以下值:

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

Ps,如果不确定密钥是否存在,则应使用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];
 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;               

 }

您应该可以按照以下方式在Linq中写这些:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM