我有这个循环,我想迭代字典的值,其中值以列表的形式来查找某个值
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
}
}
这不起作用,我不确定如何做到这一点
答案 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
}
}