2014-10-18 67 views
0

我们如何排序阵列在c#并获得排名。 例如考虑分类排序数字并获得在c#排名#

[4 5 3 1 6] 

以降序排列。

我想映射每个元素到它的索引在排序列表中。例如,如果我对列表进行排序,我会得到[6 5 4 3 2 1],所以6的索引是1,5的索引是2,依此类推。所需的输出将是:

[3  2  4  5  1] 

我搜索了很多,但没有发现任何

+0

1.请参阅LINQ的'。选择()'与指数的过载和创建包含数据和索引的匿名对象2.按数据排序3.选择索引 – zerkms 2014-10-18 09:19:31

+0

我不明白。假设我已经定义了一个这样的数组: double [] sina = new double [5]; sina [0] = 5; sina [1] = 4; sina [2] = 7; sina [3] = 9; sina [4] = 1; 你的意思是使用sina.Select(3)?但是那给了错误 – Sina 2014-10-18 09:44:15

回答

1

使用LINQ:

private static void Main(string[] args) 
    { 
     var ints = new[] { 4, 5, 3, 1, 6 }; 
     foreach (var item in ints.Select((x, i)=>new { OldIndex = i, Value = x, NewIndex = -1}) 
            .OrderByDescending(x=>x.Value) 
            .Select((x, i) => new { OldIndex = x.OldIndex, Value = x.Value, NewIndex = i + 1}) 
            .OrderBy(x=>x.OldIndex)) 
      Console.Write(item.NewIndex + " "); 

    } 
+0

那个伎俩。谢谢。但我仍然不明白为什么这样的事情应该在c#中如此复杂。 – Sina 2014-10-18 09:49:45

+0

这不是*那*复杂。什么语言使它更容易? – brz 2014-10-18 09:51:40

+0

我曾经在matlab中用一个简单的代码[a,b] = sort(array,'descend')来做到这一点 – Sina 2014-10-18 09:57:24