如何获取数组中最高数字的所有索引?

时间:2017-04-25 06:50:01

标签: c# arrays

例如,我有一个数组

arr[5] = {1, 5, 2, 3, 5}

,最高的数字显然是5。

我的问题是如何获得最高数字的索引(即5)。

预期结果为1和4.

3 个答案:

答案 0 :(得分:2)

var arr = new int[] { 1, 5, 2, 3, 5 };
        int max = arr.Max();
        List<int> indexes = new List<int>();
        for (int i = 0; i < arr.Length; i++)
        {
            if (arr[i] == max)
                indexes.Add(i);
        }
int highindex = indexes.LastOrDefault();

答案 1 :(得分:1)

这就是你如何获得最高数字的所有索引

var numbers = new int[] { 1, 5, 2, 3, 5 };

int max = numbers.Max();

var indexes = numbers.Select((c, i) => new 
                                       { 
                                          character = c, index = i 
                                       })
                     .Where(list => list.character == max)
                     .ToList();

答案 2 :(得分:1)

您可以使用LINQ查询查找等于最大数字的数字和索引:

var arr=new[] {1, 5, 2, 3, 5};
var max    = arr.Max();
var indexes= arr.Select( (n,idx)=>n==max?idx:-1)
                .Where(idx=>idx!=-1)
                .ToArray();

这将返回{1,4}

此查询使用Enumerable.Select重载提供当前元素的索引,并在数字等于最大值时返回该索引。

原始标题有点令人困惑 - 如何找到两个最大的值。通过选择值和索引,排序结果并获取前N项,您可以使用类似的查询来获取N个最大值:

var indexes = arr.Select( (val,idx)=> (val:val,idx:idx) )
                 .OrderByDescending(p=>p.val)
                 .Take(2)
                 .Select(p=>p.idx);

此查询使用C#7元组来保存中间结果并为其命名