7

ランダムな順序で 0 ~ 8 の数字をループする for ループを作成したいと思います。すべての番号は 1 回しかアクセスできないことに注意してください。

どうすればこれを達成できますか?

4

4 に答える 4

22
Random r = new Random();
foreach (int i in Enumerable.Range(0, 9).OrderBy(x => r.Next()))
{
    Console.WriteLine(i);
}
于 2012-11-19T16:28:19.940 に答える
6
  1. インデックス 0 ~ 8 の配列を生成します
  2. 配列をシャッフルする
  3. その位置のインデックスを使用して配列を反復処理します
于 2012-11-19T16:22:57.090 に答える
0

これはWeb検索から見つかりました-Perlで実装されたFisher-Yatesシャッフル。

これにより、任意の入力配列の偏りのないランダム化が生成されます。

sub fisher_yates_shuffle {
    my $array = shift;
    my $i;
    for ($i = @$array; --$i; ) {
        my $j = int rand ($i+1);
        next if $i == $j;
        @$array[$i,$j] = @$array[$j,$i];
    }
}

詳細情報:

http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle

そして私が見つけたオリジナルはからでした:

http://perl.livejournal.com/101830.html

于 2012-11-19T16:31:58.347 に答える
0

1 つの可能性:

var numbers = Enumerable.Range(0, 9).ToList();
var rnd =  new Random();
for (; numbers.Count != 0; )
{
    var currentNumber = numbers[rnd.Next(0, numbers.Count)];

    Console.WriteLine(currentNumber);

    numbers.Remove(currentNumber); // remove current random number from list
}

Enumerable.Range(0, 9).ToList()0 から 8 までの数字を含むリストを作成します。次に、ループ内でリストから乱数を選択し、ループの最後でそれをリストから削除して、次のサイクルで再び選択できないようにします。

于 2012-11-19T16:29:38.367 に答える