查询: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;
}
}
答案 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++
}
希望这可能会有所帮助。