编程语言
首页 > 编程语言> > 如何在C#中从此类字典中获取值

如何在C#中从此类字典中获取值

作者:互联网

我想创建字典,因为我知道字典在C#中是key => value,是一个非常类似于key => value(key => value)的字典

目前,我知道我可以做到:

字典< int,int> someVar =新Dictionary< int,int>();

这为我创建了一个key =>值.

创建我想做的事(这只是一个猜测,如果我做错了,请纠正我):

字典< int Dictionray< int,int> someVar = new Dictionary< int,Dictionray< int,int>

现在是有趣的部分,我想做一个,并且在此字典对象YET上只有一个for循环获得所有值,因此看起来像:

foreach (KeyValuePair<int, int> pair in someVar){
    //object = base dictionary key
    //object2 = nested dictionary key
    //object3 = nested dictionary value 
}

现在我来自PHP,因此在for循环中很难做到这一点.你有什么想法?因为我是C#和术语词典的新手(即使php数组是字典).

我在C#中知道可以使用这样的for循环:pair.Key和pair.Value.

第二部分是如何将值添加到此类字典中?我知道典型的.add(bla,bla),但是如何为嵌套部分添加值?

解决方法:

反复进行

在C#中,IDictionary< TKey,TValue>实现IEnumerable< KeyValuePair< TKey,TValue>>.因此,您可以遍历类型为IDictionary< TKey,TValue>的实例.使用foreach或Linq查询,并获取数据结构中的每个KeyValuePair.由于在这种情况下TValue本身就是IDictionary,因此您也可以在内部结构上执行此操作:

foreach(var kvp in myDictionary)
{
    foreach(var innerKvp in kvp.Value)
    {
         var myValue = innerKvp.Value
         //Logic on myValue
    }
}

使用Linq库,可以使用SelectMany非常优雅地获取所有KeyValuePair实例:

myDictionary.SelectMany(kvp => kvp.Value);

SelectMany本质上是使列表列表变平.这个Linq查询说:对于字典中的每个键值对,获取所有内部字典,将它们视为键值对列表,然后将所有这些列表展平.这将返回IEnumerable< KeyValuePair< TKey,TValue>>.

相反,如果您只关心内部字典的值而不关心键,则可以使用IDictionary< TKey,TValue>上的Values属性.返回IEnumerable< TValue>.字典中所有值的然后,我们可以使用SelectMany来获取包含字典词典中所有值的列表:

myDictionary.Values.SelectMany(dict => dict.Values);

阅读有关IDictionary< TKey,TValue>的更多信息. here及更多有关KeyValuePair< TKey,TValue>的信息. here.

新增中

为了向此数据结构添加元素,您必须首先检查内部字典是否为空.假设我们要在以1为键的字典中将3加到以2为键的字典中

var myInnerDictionary = myDictionary.ContainsKey(1) ? myDictionary[1] : (myDictionary[1] = new Dictionary<int, int>());
myInnerDictionary[1][2] = 3;

当然,如果该值已经存在,它将覆盖该位置中的值,因此您可能也要检查该值,或者使用不会覆盖的Add方法.

您还应该了解ToDictionary Linq方法,该方法可以帮助您从其他IEnumerables构造字典.阅读有关的内容here.

标签:dictionary,for-loop,key-value,c
来源: https://codeday.me/bug/20191030/1971070.html