【问题标题】:How to get all indices of the highest number in an array? [duplicate]如何获取数组中最大数字的所有索引? [复制]
【发布时间】:2017-09-22 01:11:31
【问题描述】:

例如,我有一个数组

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

最大的数字显然是5。

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

预期结果是 1 和 4。

【问题讨论】:

  • 这更多的是算法。首先,假设前两个是最大的两个,然后读取其他两个并调整。
  • 你能澄清一下你对结果的期望吗?是否需要在数组中找到所有 5 的索引?
  • 我需要找到 arr[1] 中的 1 和 arr[4] 中的 4
  • 我猜你已经知道如何找到最大元素了。这个问题将帮助您找到所有出现的事件:stackoverflow.com/questions/10443461/…
  • @defaultlocale:感谢您指出我的答案。 :)

标签: c# arrays


【解决方案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 元组来保存中间结果并为其命名

【讨论】:

  • 简单高效的解决方案.....
【解决方案2】:

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

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();

【讨论】:

    【解决方案3】:
    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();
    

    【讨论】:

    • 您不需要列表,一个简单的 LINQ 查询将返回相同的结果
    猜你喜欢
    • 2018-12-09
    • 1970-01-01
    • 2019-05-09
    • 1970-01-01
    • 2017-10-20
    • 2022-08-16
    • 1970-01-01
    • 2016-02-01
    • 2012-11-15
    相关资源
    最近更新 更多