LINQとC#を使用したランダム配列
-
05-07-2019 - |
質問
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();
所属していません StackOverflow