私は奇妙な状況にあります。1〜20の数字を持つ配列があり、もう1つの配列にはすべての乱数があります。Array.Sort(rand)を使用してrandnos配列を並べ替えることができます。しかし、numbers配列を使用して、これらの数値にランクを付けるにはどうすればよいですか。
並べ替えアルゴリズムを使用する必要がありますか?または、利用可能なものはありますか?
私は奇妙な状況にあります。1〜20の数字を持つ配列があり、もう1つの配列にはすべての乱数があります。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
これは実際に何を達成しますか?説明に基づいて探している「ランク」は、並べ替えられた後の配列インデックスにすぎません。2番目のアレイを使用する理由はまったくありません。
「ランク」配列に自然数のシーケンス以外のものが含まれている場合、これはある程度役立つことがわかります。同じ順序でソートする必要がある2つの配列がある場合、Array.Sort()
この機能を提供するオーバーロードがあります。このMSDNの記事を参照してください。あなたがする必要があるのは電話することだけですArray.Sort(rand, ranks)