C# 如何获取数组中最大数的索引?

C# 如何获取数组中最大数的索引?,c#,.net,C#,.net,我有这个阵列: float[] sizeEdge = new float[12,43,556,98]; 也许我的问题对你们中的一些人来说很幼稚,但是,我是.NET的新手, 我需要得到最大数字的数组索引 我如何实现它 提前感谢您。float max=0; float max = 0; int key = 0; for(int x=0;x<sizeEdge.Length;x++){ if(max<sizeEdge[x]){ max=sizeEdge; key=x; } }

我有这个阵列:

float[] sizeEdge = new float[12,43,556,98];
也许我的问题对你们中的一些人来说很幼稚,但是,我是.NET的新手, 我需要得到最大数字的数组索引

我如何实现它

提前感谢您。

float max=0;
float max = 0;
int key = 0;
for(int x=0;x<sizeEdge.Length;x++){
 if(max<sizeEdge[x]){
  max=sizeEdge;
  key=x;
 }
}
int键=0; 对于(int x=0;x
float max=0;
int键=0;
对于(intx=0;x,可以使用Linq

不要忘记using语句
using System.Linq;

int indexOfMax = Array.IndexOf(sizeEdge, sizeEdge.Max());
您可以使用Linq

不要忘记using语句
using System.Linq;

int indexOfMax = Array.IndexOf(sizeEdge, sizeEdge.Max());
注意:这将迭代数组两次,如果数组为空,将引发异常。如果需要处理这些,循环可能更干净。您可以创建一个扩展方法:

public static int IndexOfMax<T>(this IEnumerable<T> seq) where T : IComparable<T>
{
    if(! seq.Any()) return -1;
    T max = seq.First();
    int maxIdx = 0;
    int idx = 1;

    foreach(T item in seq.Skip(1))
    {
        if(max.CompareTo(item) < 0)
        {
            max = item;
            maxIdx = idx;
        }
        ++idx;
    }

    return maxIdx;
}
public static int IndexOfMax(这是IEnumerable seq),其中T:IComparable
{
if(!seq.Any())返回-1;
T max=顺序第一();
int maxIdx=0;
int-idx=1;
foreach(序列跳过(1)中的T项)
{
如果(与(项目)的最大比较小于0)
{
最大值=项目;
maxIdx=idx;
}
++idx;
}
返回maxIdx;
}
或linq版本:

public static int IndexOfMax<T>(this IEnumerable<T> seq) where T : IComparable<T>
{
    return seq.Select((f, idx) => new { Val = f, Idx = idx })
        .Aggregate(new { Max = default(T), MaxIndex = -1 }, (mp, fp) =>
        {
            return mp.MaxIndex == -1 || fp.Val.CompareTo(mp.Max) > 0 ? new { Max = fp.Val, MaxIndex = fp.Idx } : mp;
        }).MaxIndex;
}
public static int IndexOfMax(这是IEnumerable seq),其中T:IComparable
{
返回seq.Select((f,idx)=>new{Val=f,idx=idx})
.Aggregate(新的{Max=default(T),MaxIndex=-1},(mp,fp)=>
{
返回mp.MaxIndex==-1 | | fp.Val.CompareTo(mp.Max)>0?新的{Max=fp.Val,MaxIndex=fp.Idx}:mp;
}).MaxIndex;
}
注意:这将迭代数组两次,如果数组为空,将引发异常。如果需要处理这些,循环可能更干净。您可以创建一个扩展方法:

public static int IndexOfMax<T>(this IEnumerable<T> seq) where T : IComparable<T>
{
    if(! seq.Any()) return -1;
    T max = seq.First();
    int maxIdx = 0;
    int idx = 1;

    foreach(T item in seq.Skip(1))
    {
        if(max.CompareTo(item) < 0)
        {
            max = item;
            maxIdx = idx;
        }
        ++idx;
    }

    return maxIdx;
}
public static int IndexOfMax(这是IEnumerable seq),其中T:IComparable
{
if(!seq.Any())返回-1;
T max=顺序第一();
int maxIdx=0;
int-idx=1;
foreach(序列跳过(1)中的T项)
{
如果(与(项目)的最大比较小于0)
{
最大值=项目;
maxIdx=idx;
}
++idx;
}
返回maxIdx;
}
或linq版本:

public static int IndexOfMax<T>(this IEnumerable<T> seq) where T : IComparable<T>
{
    return seq.Select((f, idx) => new { Val = f, Idx = idx })
        .Aggregate(new { Max = default(T), MaxIndex = -1 }, (mp, fp) =>
        {
            return mp.MaxIndex == -1 || fp.Val.CompareTo(mp.Max) > 0 ? new { Max = fp.Val, MaxIndex = fp.Idx } : mp;
        }).MaxIndex;
}
public static int IndexOfMax(这是IEnumerable seq),其中T:IComparable
{
返回seq.Select((f,idx)=>new{Val=f,idx=idx})
.Aggregate(新的{Max=default(T),MaxIndex=-1},(mp,fp)=>
{
返回mp.MaxIndex==-1 | | fp.Val.CompareTo(mp.Max)>0?新的{Max=fp.Val,MaxIndex=fp.Idx}:mp;
}).MaxIndex;
}
您可以使用以下方法:

返回值序列中的最大值

结果将是

556
这里有一个。

您可以使用以下方法:

返回值序列中的最大值

结果将是

556

这里有一个。

这应该行得通;概括为
IEnumerable


这应该是可行的;概括为
IEnumerable


您可以使用
选择的替代版本

float[] sizeEdge = new float[12,43,556,98];

var maxIndex = sizeEdge.Select((x,i) => new { value = x, index = i})
                       .OrderByDescending(x => x.value)
                       .Select(x=> x.index)
                       .FirstOrDefault();

您可以使用
选择的替代版本

float[] sizeEdge = new float[12,43,556,98];

var maxIndex = sizeEdge.Select((x,i) => new { value = x, index = i})
                       .OrderByDescending(x => x.value)
                       .Select(x=> x.index)
                       .FirstOrDefault();

您可以尝试很多方法。到目前为止您尝试了哪些方法,效果如何?我尝试了以下方法:float maxEdgeSize=sizedgedge.Max();然后在if()的帮助下抛出数组声明来检查最大的数字。但我正在寻找更优雅的方法。你的问题有不同的方法,这取决于你的老师希望你做什么。:)有很多方法你可以尝试。到目前为止你尝试了什么,结果如何?我试过这个:float maxEdgeSize=sizedgedgedge.Max();然后我使用if()语句抛出数组以检查最大的数字。但我正在搜索更优雅的内容。你的问题有不同的方法,这取决于你的老师希望你做什么。:)请注意,如果数组为空,这将不起作用(你将有一个无效的0键)或者如果一切都是负数,也许你应该改变int max=0;浮动最大值=浮动最小值;请注意,如果数组为空(您将有一个无效的0键)或所有内容都为负数,则此操作将不起作用;浮动最大值=浮动最小值;