繁体   English   中英

foreach在foreach C#中

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM