1

我有这个循环,我想遍历字典的值,其中值以列表的形式找到某个值

Dictionary<int, List<int>> A = new Dictionary<int, List<int>>();

  foreach (var item in A[*key*].Values)
            {
                if (A[*key*].Values == *specified value*)
                {
                     a = true; //a is bool variable a made
                }
            }

这不起作用,我不确定如何做到这一点

4

3 回答 3

2

您需要使用字典键来获取列表int,在这个 int 列表中您可以使用Enumerable.Contains

foreach (var item in A.Keys)
{
    if (A[item].Contains(*specified value*))
    {
         a = true; //a is bool variable a made
    }
}

如果您不需要知道在哪个键下找到了所需的值,那么您可以直接使用Dictionary.Values而不是使用键。

foreach (var list in A.Values)
{
    if (list.Contains(*specified value*))
    {
         a = true; //a is bool variable a made
    }
}
于 2013-07-04T02:21:04.243 回答
1

如果你想要一个 LINQ 解决方案:

bool a = A.Values
    .SelectMany(list => list)
    .Any(item => item == specifiedValue);

或使用标准foreach循环:

bool a = false;
foreach(var list in A.Values)
{
    foreach(var item in list)
    {
        if (item == specifiedValue)
        {
            a = true;
            break;
        }
    }

    if (a)
        break;
}

我假设你一旦找到你的项目就会想跳出循环。当然,此时跳出嵌套循环有点痛苦,但有一些简单的方法可以解决这个问题(例如,将迭代移动到返回的方法,或者使用可怕的 goto)但是你也可以使用 LINQ解决方案,因为(IIRC)它本质上归结为相同的嵌套foreach结构。

于 2013-07-04T02:37:19.957 回答
0
foreach (var item in A[key].Values)
{
    if (item == *specified value*)
    {
         a = true; //a is bool variable a made
    }
}
于 2013-07-04T02:20:04.053 回答