对数组进行排序并替换 w.r.t 索引的值

本文关键字:索引 替换 数组 排序 | 更新日期: 2023-09-27 18:33:04

我遇到了一个奇怪的情况。有一个数组有从 1 到 20 的数字,另一个数组有所有的随机数。使用 Array.Sort(rand),我可以对 randnos 数组进行排序。但是我如何使用数字数组对这些数字进行排名。

我应该使用排序算法吗?还是有什么可用的东西?

对数组进行排序并替换 w.r.t 索引的值

给定一个随机数数组:

var rand = new Random();
    // generate an array of 10 random numbers between 1 and 100
var randNumbers = Enumerable.Range(1,10)                  // enumerable 1 to 10
                            .Select(_ => rand.Next(100))  // replace with random num
                            .ToArray();                   // convert to array

这是一种对它们进行排序并提供其排名的方法,作为字符串number-rank

var sorted = randNumbers.OrderBy(x => x)                   // sort by the number
                        .Select((val,idx) =>               // given the value and the index
                                 String.Format("{0}-{1}",  // return value-index as string
                                        val,idx+1))
                        .ToArray();                        // convert to array

打印(例如):

21-1 
30-2 
31-3 
32-4 
40-5 
51-6 
67-7 
70-8 
84-9 
99-10

请注意,您还可以执行以下操作:

randNumbers.Sort() // sort in place first
var sorted = ... // same as above without the OrderBy

这实际上完成了什么? 根据您的描述,您要查找的"排名"只是排序后的数组索引。 根本没有理由涉及第二个阵列。

如果您的"秩"数组包含自然数序列以外的内容,我可以看到这有点用处。 如果有两个数组需要按相同的顺序排序,则存在将提供此功能的重载Array.Sort()。 请参阅此 MSDN 文章以供参考。 您需要做的就是打电话给Array.Sort(rand, ranks)