foreach in foreach c#

时间:2016-03-26 14:18:03

标签: c# foreach

查询:0 4 1 0 0

secQuery:1 1 0 0 3

我需要比较元素:0和1,4和1,1和0,0和0,0和3。 但是休息阻止了我的第二次预告。

我试试这个:

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

4 个答案:

答案 0 :(得分:3)

您不需要嵌套循环来比较并行数组。您需要一个循环来同时迭代两个数组 - 例如,通过它们的索引:

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);

答案 1 :(得分:1)

压缩或循环标准的替代方法是使用Linq.Where中的重载来提供对正在评估的元素的索引的访问,并使用索引与其他列表进行比较:

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。

答案 2 :(得分:0)

您现在的代码展示了如何将第一个列表中的元素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
    }
}

答案 3 :(得分:0)

任务没有明确定义,因此基于合格的猜测,您似乎可以使用 for-loop 以相当简单的方式实现结果:

for (int i = 0; i <= query.Length; i++)
{
    if(query[i]<secQuery[i]) count++
}

希望这可能会有所帮助。