将项添加到现有列表中

时间:2017-03-22 07:03:38

标签: c# linq

我有一个字典如下

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中的下一个项目,如果有匹配的键,那么我必须将该项添加到新词典中的列表中。

如何在不创建新列表的情况下将新项目添加到字典中的列表中。

4 个答案:

答案 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});
}