当前位置: 首页 > 编程语言 > C#

如何获取int数组中最低值的索引?分享

时间:2023-04-10 19:55:14 C#

如何获取整数数组中最小值的索引?考虑到这是一项非常基本的任务,我想不出一个合适的简单方法来完成它。如何获取int数组中最低值的索引?可以使用Linq/MoreLinq。到目前为止,我找不到一个合理的单线。既然你提到了MoreLinq,那怎么样:int[]array=..//如果数组为空则抛出。//如果有重复的最小值,将选择索引较小的//。intminIndex=array.AsSmartEnumerable().MinBy(entry=>entry.Value).Index;另一种选择://如果数组为空则抛出。//需要遍历数组两次。intminIndex=Array.IndexOf(array,array.Min());您当然可以编写自己的扩展方法://返回最小值的最后一个索引。publicstaticintIndexOfMin(thisIEnumerablesource){if(source==null)thrownewArgumentNullException("source");intminValue=int.MaxValue;intminIndex=-1;整数指数=-1;foreach(intnuminsource){index++;if(num一些努力,你可以通过接受IComparer将其转换为任何类型,默认为Comparer.Default。LINQ可能不是解决此问题的最佳方案,但这里有另一种变体,即O(n)。它不'排序,只遍历数组一次。vararr=newint[]{3,1,0,5};intpos=Enumerable.Range(0,arr.Length).Aggregate((a,b)=>(arr[a]更新:对原始问题的直接回答,我就是这样做的:vararr=newint[]{3,1,0,5};intpos=0;for(inti=0;i不,它不使用LINQ。是的,它不止一行。但它非常简单,非常快。将它变成一个小方法并从一行中的任何地方调用它:pos=FindMinIndex(arr);不是很友好,但是...array.Select((n,i)=>new{index=i,value=n}).OrderBy(item=>item.value).First().index很丑,但是它只需要一次通过序列,只使用内置的框架方法:intindex=yourArray.Select((x,i)=>new{Val=x,Idx=i}).Aggregate(new{Val=-1,Idx=-1},(a,x)=>(x.Idx==0||x.valx.Idx);当然可以写一个通用的扩展方法:以上是C#学习教程:如何获取int数组中最小值的索引?分享所有内容,如果对大家有用,需要进一步了解C#希望大家多多关注教程---intindex=yourArray.MinIndex();//...publicstaticclassEnumerableExtensions{publicstaticintMinIndex(thisIEnumerablesource,IComparercomparer=null){if(source==null)thrownewArgumentNullException("source");if(比较器==null)比较器=Comparer.Default;使用(varenumerator=source.GetEnumerator()){如果(!enumerator.MoveNext())返回-1;//或者可能抛出InvalidOperationExceptionintminIndex=0;TminValue=enumerator.Current;整数索引=0;while(enumerator.MoveNext()){index++;if(comparer.Compare(enumerator.Current,minValue)本文采集自网络,不代表立场,如涉及侵权,请点击右侧联系管理员删除,如有转载,请注明出处: