[英]foreach in foreach c#
查询:0 4 1 0 0
secQuery:1 1 0 0 3
我需要比较元素:0和1、4和1,1和0,0和0,0和3。但是break停止了我的第二次foreach。
我尝试这样:
foreach (var a in query)
{
bool flag = false;
foreach (var b in secQuery)
{
if (b > a)
{
count++;
}
flag = true;
break;
}
if (flag) continue;
}
和这个:
foreach (var a in query)
{
foreach (var b in secQuery)
{
if (b > a)
{
count++;
}
//break; continue;
}
}
您不需要嵌套循环即可比较并行数组。 您需要一个循环,同时循环两个数组,例如,通过它们的索引:
for (var i = 0 ; i != query.Length ; i++) {
var first = query[i];
var second = secQuery[i];
Console.WriteLine("Comparing {0} and {1}", first, second);
}
上面的代码假定两个数组具有相同数量的元素。
您还可以使用LINQ的Zip
方法来配对元素:
foreach (var p in query.Zip(secQuery, (first, second) => new {first, second}) {
Console.WriteLine("Comparing {0} and {1}", p.first, p.second);
}
如果您只需要query
中大于secQuery
的项目数,就可以这样计算:
var res = query
.Zip(secQuery, (first, second) => first > second)
.Count(cmp => cmp);
压缩或标准for循环的替代方法是使用Linq中的重载,该重载可访问要评估的元素的索引,并使用该索引与其他列表进行比较:
var q1 = new[] {0, 4, 1, 0, 0};
var q2 = new[] {1, 1, 0, 0, 3};
int count = q1.Where( (x,i) => q2[i] > x ).Count();
count
结果将为2。
现在,您的代码演示如何元素比较a
从第一清单中每个元素b
第二名单。
您实际上要说的是互相比较各个元素。 仅使用索引器。
if(query.Count() == secQuery.Count()) {
for(var i = 0; i<query.Count(); i++) {
var a = query[i]; //assuming you have an indexer on your types, otherwise maybe you can convert to List using ToList() linq method
var b = secQuery[i];
if(b > a) count++; //now a and b are corresponding elements you can compare them
}
}
任务没有明确定义,因此根据限定的猜测,似乎可以使用for循环以相当简单的方式获得结果:
for (int i = 0; i <= query.Length; i++)
{
if(query[i]<secQuery[i]) count++
}
希望这会有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.