usingLINQwitha2Darray11110101数组中的每个值只能是0或1。上面的简化示例显示了4行,每行5列。我想弄清楚如何使用LINQ将索引返回到具有最多1的行,在上面的示例中应该返回1。以下非LINQC#代码解决了该问题:staticintGetMaxIndex(byte[,]TwoDArray){//此方法查找设置了最多1的行。//intNumRows=TwoDArray.GetLength(0);intNumCols=TwoDArray.GetLength(1);intRowCount,MaxRowCount=0,MaxRowIndex=0;//for(intLoopR=0;LoopRnew{index=row,count=Enumerable.Range(0,5).Select(col=>arr[row,col]).Count(x=>x==1)}).OrderByDescending(x=>x.count).Select(x=>x.index).First();我就是这样做的。它或多或少像其他的,但没有任何Enumerable.Range(并不是说它们有任何问题(我一直使用它们......在这种情况下它只是使代码更加缩进)。这也包括PLINQ的东西。TPL(async/await)不适合这个,因为它是计算绑定的,TPL更适合I/O绑定操作。如果你使用async/await而不是PLINQ,你的代码将按顺序执行。这是因为async/await在线程被释放之前不会并行化(并且它可以启动下一个任务......然后可以并行执行),并且纯同步函数(例如CPU的东西)实际上不会每次都等待......它们会运行一直。基本上,它在开始下一个之前完成列表中的第一件事,使其按顺序执行。PLINQ显式启动并行任务并且没有这个问题。//arry是你的2d字节数组(byte[,]arry)varmaxIndex=arry.Cast()//将整个数组转换为字节.AsParallel()//转换到PLINQ(删除它以不使用它).Select((b,i)=>new//创建索引{value=b,index=i}).GroupBy(g=>g.index/arry.GetLength(1))//按行分组.Select((g,i)=>new{sum=g.Select(g2=>(int)g2.value).Sum(),//对每一行索引求和=i}).OrderByDescending(g=>g.sum)//maxbysum.Select(g=>g.index)//获取索引.First();//这应该是最高的指标在效率方面,你的for循环可能会得到更好的结果。我要问的问题是,哪个更具可读性和清晰度?1)你可以用LINQ做到这一点...privatestaticintGetMaxIndex(byte[,]TwoDArray){returnEnumerable.Range(0,TwoDArray.GetLength(0)).Select(x=>new{Index=x,Count=Enumerable.Range(0,TwoDArray.GetLength(1)).Count(y=>TwoDArray[x,y]==1)}).OrderByDescending(x=>x.Count).First().Index;}...你必须测试它以查看LINQ是更快还是更慢。2)可以使用PLINQ。C#LearningTutorial:HowtoUseLINQwith2DArrays全部内容分享,如果对大家有用,需要进一步了解C#LearningTutorial,希望大家多多关注—privatestaticintGetMaxIndex2(byte[,]TwoDArray){returnParallelEnumerable.Range(0,TwoDArray.GetLength(0)).Select(x=>new{Index=x,Count=Enumerable.Range(0,TwoDArray.GetLength(1)).Count(y=>TwoDArray[x,y]==1)}).OrderByDescending(x=>x.Count).First().Index;}//此代码摘自//http://www.codeproject.com/Articles/170662/Using-LINQ-and-Extension-Methods-in-C-to-Sort-VectprivatestaticIEnumerableConvertToSingleDimension(T[,]源){T[]arRow;for(introw=0;row}forlinqoperationvarresult=(fromiteminConvertToSingleDimension(Array2D).Select((i,index)=>new{Values=i,Index=index})orderbyitem.Values排序.Sum(i=>i)descending,item.Indexselectitem.Index).FirstOrDefault();本文整理自网络,不代表立场,如涉及侵权,请点击右侧联系管理员删除,如有转载请注明出处: