2015-10-26 48 views
0

我有這樣排序2在一個行基於該值維陣列

1 3 9 2 7 8 9 
120 70 76 190 300 50 40 

數據如何可以基於第二行對數組進行排序,並從第一行返回最大數量的值。我的意思是,輸出變成>

7 2 1 9 3 8 9 
300 190 120 76 70 50 40 

而且我得到7作爲輸出。

+0

@Mark E,我已經嘗試使用循環,我可以得到結果,但效率不高。我正在尋找一些代碼少的東西(比如方法)。 –

+0

爲什麼在第一個地方使用2維數組?正好2行?它看起來像一個單維陣列的候選人,你不覺得嗎? –

+0

我建議發佈代碼,你有這個作品,然後有人可以看看可以做些什麼,使其更有效。你怎麼評判效率? –

回答

1

首先,我會從矩形陣列中獲取數據,使其更容易使用。爲此,首先將數據轉換爲List<Tuple<int, int>>,因爲它更容易處理。

int[,] rawData = { { 1, 3, 9, 2, 7, 8, 9 }, { 120, 70, 76, 190, 300, 50, 40 } }; 
var data = new List<Tuple<int, int>>(); 

for(int i = 0; i < rawData.GetLength(1); i++) 
{ 
    data.Add(new Tuple<int, int>(rawData[0, i], rawData[1, i])); 
} 

然後,它只是使用Linq查詢來獲取您想要的數據的問題。

var result = data.OrderByDescending(x => x.Item2).First().Item1; 

Fiddle

0

如果你想知道答案,「什麼是最大數量現在」(或換種方式,維持秩序,而在排序後處理 - 當心它有性能損失),那麼SortedList可以派上用場!

 int[] a = { 1, 3, 9, 2, 7, 8, 9 }; 
     int[] b = { 120, 70, 76, 190, 300, 50, 40 }; 

     var sortedList = new SortedList<int,int>(); 
     for (int i = 0; i < a.Length; i++) 
     { 
      sortedList[b[i]] = a[i];   
     } 
     Console.WriteLine(sortedList.Last().Value);  

(如果你想看看有什麼電流最大值爲您添加數據只是移動WriteLine到循環的內部)