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));
任何帮助将不胜感激。
答案 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();