質問

LINQの列挙可能なクラスの使用に関するMSDNマガジンの記事を読んでいたランダム配列を生成します。この記事ではVB.NETを使用していますが、C#で同等のものがすぐにはわからない:

Dim rnd As New System.Random()
Dim numbers = Enumerable.Range(1, 100). _
    OrderBy(Function() rnd.Next)
役に立ちましたか?

解決

Developer Fusion VB.NetからC#へのコンバーターは、同等のC#コードは次のとおりです。

System.Random rnd = new System.Random();
IEnumerable<int> numbers = Enumerable.Range(1, 100).OrderBy(r => rnd.Next());

今後の参照用に、 C#からVB.Netへのコンバーター他のいくつかのツールも利用できます。

他のヒント

ソートアルゴリズムは数値に対して複数の比較を行う必要があり、その数値のラムダを呼び出すたびに同じ数値に対して異なるソートキーを取得するため、これはまずないと思いました。ただし、リスト内の各要素に対して1回だけ呼び出し、後で使用するためにその値を格納するように見えます。このコードはこれを示しています:

int timesCalled = 0;
Random rnd = new Random();

List<int> numbers = Enumerable.Range(1, 100).OrderBy(r =>
   {
       timesCalled++;
       return rnd.Next();
   }
).ToList();

Assert.AreEqual(timesCalled, 100);
Random rnd = new Random();
IEnumerable<int> numbers = Enumerable.Range(1, 100).OrderBy(r => rnd.Next());

もっと簡単なことはどうですか...

Enumerable.Range(1, 100).OrderBy(c=> Guid.NewGuid().ToString())

Visual Studioにアクセスせずに頭の外でできること(指を交差させる):

System.Random rnd = New System.Random();
IEnumerable<int> numbers = Enumerable.Range(1, 100).OrderBy(rnd => rnd.Next);

C5汎用コレクションライブラリを使用すると、組み込みの Shuffleを使用できます。 ()メソッド:

IList<int> numbers = new ArrayList<int>(Enumerable.Range(1,100));
numbers.Shuffle();
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top