对数组进行排序并替换值w.r.t index

时间:2012-05-03 05:57:51

标签: c# arrays windows-phone-7 sorting

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

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

2 个答案:

答案 0 :(得分:1)

给出一组随机数:

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

答案 1 :(得分:0)

这实际上取得了什么成果?根据您的描述,您正在寻找的“排名”只是排序后的数组索引。根本没有理由涉及第二个阵列。

如果您的“rank”数组包含除自然数序列之外的其他内容,我可以看到这有点有用。如果您有两个需要按相同顺序排序的数组,那么Array.Sort()的重载将提供此功能。请参阅this MSDN文章以供参考。您只需拨打Array.Sort(rand, ranks)

即可