C# foreach中的foreach#

C# foreach中的foreach#,c#,foreach,C#,Foreach,查询:041010 secQuery:1103 我需要比较元素: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;

查询:041010

secQuery:1103

我需要比较元素: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;
    }
}

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

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

代码现在显示了如何将第一个列表中的元素
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
    }
}
if(query.Count()==secQuery.Count()){
对于(var i=0;i a)count++;//现在a和b是对应的元素,您可以比较它们
}
}

您现在编写的代码显示了如何将第一个列表中的元素
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
    }
}
if(query.Count()==secQuery.Count()){
对于(var i=0;i a)count++;//现在a和b是对应的元素,您可以比较它们
}
}

任务没有明确定义,因此根据限定猜测,似乎可以使用for循环以一种相当简单的方式实现结果:


for(int i=0;i任务没有明确定义,因此根据限定猜测,您似乎可以使用for循环以一种相当简单的方式获得结果:


for(int i=0;izipping或循环标准的替代方法是在中使用重载,该重载提供对正在评估的元素的索引的访问,并使用该索引与其他列表进行比较:

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。

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

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。

显示的代码片段将第一个列表中的每个元素与第二个列表中的每个元素进行比较。可以吗?为什么不使用一个迭代每个数组的最小长度的
for
呢?似乎您想要执行类似于
for(int i=0;isecQuery[i])count++;
现在您正在将
query
的每个元素与
secQuery
的每个其他元素进行比较,复杂性是n²。请先准确定义您的问题。我不明白为什么您要在第一次迭代后立即
在内部
foreach
循环中中断
,然后还要中断外部循环第一个。显示的代码片段将第一个列表中的每个元素与第二个列表中的每个元素进行比较。可以吗?为什么不使用一个迭代每个数组的最小长度的
for
?似乎您希望执行类似
for(int i=0;isecQuery[i])count++;
现在您正在将
query
的每个元素与
secQuery
的每个其他元素进行比较,复杂性是n²。请先准确定义您的问题。我不明白为什么您要在第一次迭代后立即
在内部
foreach
循环中中断
,然后还要中断外部循环一个。我最初想到的是zip;在这种情况下,OP只是想要一个比较计数,我想不出一个合适的方法来使用zip返回比较计数。如果你有一些想法,我会很感兴趣。@MetroSmurf你可以将它们组合成一个
bool
,并计算有多少项是
true
(请参见编辑)。将项目投影到bool并根据真实项目计数的有趣方法。做得好。我最初想到了zip;在这种情况下,OP只是想要一个比较计数,我想不出一个体面的方法来使用zip返回比较计数。如果您有一些想法,我会感兴趣。@MetroSmurf您可以将它们组合成
bool,并计算有多少项是
真的
(请参见编辑)。将项目投影到bool并根据真实项计数的有趣方法。做得好。