2015-10-26 83 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到循环的内部)