如何从Dictionary <uint,list <uint =“” >>中删除基于键的值?

时间:2018-11-15 18:51:14

标签: c# dictionary

This is the errror message I get with the k variable. 我的代码中有一个Dictionary<uint, List<uint>>格式的字典。我想遍历字典并根据而不是最初的键删除项目。然后,一旦键中的所有被删除,我便希望删除。我不确定该怎么做。

我使用了一个foreach循环进行迭代,但它似乎不起作用。有人可以给我指导,提供有关如何执行此操作的伪代码。

k出现问题。

我使用的代码。

List<uint> todel = MyList.Keys.Where(k => k.Contains(Idx)).ToList();
todel.ForEach(k => MyList.Remove(k));

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

“我想遍历字典并首先根据值而不是键来删除项。然后,一旦键中的所有值都被删除,我想删除键。” < / p>

如果我正确理解的话,这是一种方法:

Dictionary<int, List<int>> source = new Dictionary<int, List<int>>();
source.Add(1, new List<int> { 1, 2, 3, 4, 5});
source.Add(2, new List<int> { 3, 4, 5, 6, 7});
source.Add(3, new List<int> { 6, 7, 8, 9, 10});

foreach (var key in source.Keys.ToList()) // ToList forces a copy so we're not modifying the collection
{
    source[key].RemoveAll(v => v < 6); // or any other criterion

    if (!source[key].Any())
    {
        source.Remove(key);
    }
}

Console.WriteLine("Key count: " + source.Keys.Count());
foreach (var key in source.Keys)
{
    Console.WriteLine("Key: " + key + " Count: " + source[key].Count());
}

输出:

  

键数:2
  密钥:2计数:2
  密钥:3计数:5

答案 1 :(得分:0)

我猜这是有问题的行:

List<uint> todel = MyList.Keys.Where(k => k.Contains(Idx)).ToList();

尝试这样的事情

List<uint> todel = MyList.Keys.Where(k => k == Idx).ToList();

k不是列表,它是uint类型。

如果您要删除包含IDx的记录值,请尝试

List<uint> todel = MyList.Where(k => k.Value.Contains(Idx)).Select(x => x.Key).ToList();