2017-04-25 73 views
0

例如,我有一個數組如何獲取數組中最高數字的所有索引?

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

和最高的數字是明顯5.

我的問題是如何得到最多的兩個指標(即5)。

預期的結果是1米4

+0

這是更多的算法。首先,假設前兩個是最大的兩個,然後閱讀其他人並進行調整。 –

+0

你能澄清一下你期望的結果嗎?你需要在數組中找到所有5的索引嗎? –

+0

我需要在arr [1]和4中找到arr [4] –

回答

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

你不需要一個列表,一個簡單的LINQ查詢將返回相同的結果 –

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(); 
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元組來保存中間結果,並給他們的名字

+0

簡單高效的解決方案..... – csharpbd

相關問題