字典列表再次迭代

时间:2013-07-04 02:18:28

标签: c# list loops dictionary foreach

我有这个循环,我想迭代字典的值,其中值以列表的形式来查找某个值

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
                }
            }

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

3 个答案:

答案 0 :(得分:2)

您需要使用字典键获取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
    }
}

答案 1 :(得分: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结构。

答案 2 :(得分:0)

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