我遇到了一个奇怪的情况。有一个数组有从 1 到 20 的数字,另一个数组有所有的随机数。使用 Array.Sort(rand) 我可以对 randnos 数组进行排序。但是如何使用 numbers 数组对这些数字进行排名。
我应该使用排序算法吗?或者有什么可用的东西吗?
我遇到了一个奇怪的情况。有一个数组有从 1 到 20 的数字,另一个数组有所有的随机数。使用 Array.Sort(rand) 我可以对 randnos 数组进行排序。但是如何使用 numbers 数组对这些数字进行排名。
我应该使用排序算法吗?或者有什么可用的东西吗?
给定一个随机数数组:
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)