0

私は奇妙な状況にあります。1〜20の数字を持つ配列があり、もう1つの配列にはすべての乱数があります。Array.Sort(rand)を使用してrandnos配列を並べ替えることができます。しかし、numbers配列を使用して、これらの数値にランクを付けるにはどうすればよいですか。

並べ替えアルゴリズムを使用する必要がありますか?または、利用可能なものはありますか?

4

2 に答える 2

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
于 2012-05-03T07:00:56.960 に答える
0

これは実際に何を達成しますか?説明に基づいて探している「ランク」は、並べ替えられた後の配列インデックスにすぎません。2番目のアレイを使用する理由はまったくありません。

「ランク」配列に自然数のシーケンス以外のものが含まれている場合、これはある程度役立つことがわかります。同じ順序でソートする必要がある2つの配列がある場合、Array.Sort()この機能を提供するオーバーロードがあります。このMSDNの記事を参照してください。あなたがする必要があるのは電話することだけですArray.Sort(rand, ranks)

于 2012-05-03T06:24:31.313 に答える