我有一个字典如下
var dicAclWithCommonDsEffectivity = new Dictionary<string, List<int>>();
我有一个列表如下
var dsList=new List<int>();
对于dsList
中的每个项目,我将在dicAclWithCommonDsEffectivity
字典中搜索列表中的匹配值。如果我找到匹配,我会使用其密钥并形成一个组合所有密钥的新密钥。我将创建一个新列表并添加项目。
foreach (int i in dsList)
{
var aclWithmatchingDS = dicAclWithCommonDsEffectivity.Where(x => x.Value.Contains(i)).Select(x=>x.Key);
if (aclWithmatchingDS.Count() > 0)
{
string NewKey= aclWithmatchingDS.key1+","aclWithmatchingDS.key2 ;
//if NewKey is not there in dictionary
var lst=new List<int>(){i};
//Add item to dictionary
//else if item is present append item to list
//oldkey,{oldlistItem,i};
}
}
对于dsList中的下一个项目,如果有匹配的键,那么我必须将该项添加到新词典中的列表中。
如何在不创建新列表的情况下将新项目添加到字典中的列表中。
答案 0 :(得分:3)
你可能想要这样的东西:
if (dicAclWithCommonDsEffectivity.ContainsKey(NewKey))
{
dicAclWithCommonDsEffectivity[NewKey].Add(i)
}
else
{
dicAclWithCommonDsEffectivity.Add(NewKey, lst); // or simply do new List<int>(){ i } instead of creating lst earlier
}
答案 1 :(得分:2)
在KeyValue
中获取第一个dicAclWithCommonDsEffectivity
对并将其添加到列表中,这是此处的值,可以直接访问:
if (aclWithmatchingDS.Count() > 0)
{
dicAclWithCommonDsEffectivity.Add(NewKey,lst);
}
else
{
aclWithmatchingDS.First().Value.Add("Here add your item");
}
答案 2 :(得分:2)
我建议TryGetValue
方法在这种情况下是典型的:
List<int> list;
if (dicAclWithCommonDsEffectivity.TryGetValue(NewKey, out list))
list.Add(i);
else
dicAclWithCommonDsEffectivity.Add(NewKey, new List<int>() {i});
如果是 C#7.0 ,你可以摆脱list
声明:
if (dicAclWithCommonDsEffectivity.TryGetValue(NewKey, out var list))
list.Add(i);
else
dicAclWithCommonDsEffectivity.Add(NewKey, new List<int>() {i});
答案 3 :(得分:1)
让我在建议之前澄清一下,所以你想根据一些条件检查词典中是否存在键,如果存在特定键意味着你想要将新项添加到相应的键中,或者你想要创建新项目的新密钥和新列表,如果我理解正确的要求意味着您可以尝试以下方法:
if(dicAclWithCommonDsEffectivity.ConainsKey(NewKey))
{
aclWithmatchingDS[NewKey].Add(i);
}
else
{
aclWithmatchingDS.Add(NewKey, new List<int>(){i});
}