ユーザーは数字を10個のテキストボックスに入力し、それらを配列に送りました。今私はこの配列から乱数を生成したいと思います。私に何ができる?cで数字を与えることから乱数を生成する#
答えて
何か:
public class Randomizer<T>
{
private readonly Random _random = new Random();
private readonly IList<T> _numbers;
public Randomizer(IList<T> numbers)
{
_numbers = numbers;
}
public T Next()
{
int idx = _random.Next(0, _numbers.Count);
return _numbers[idx];
}
}
使用法:
var r = new Randomizer<int>(new int[] { 10, 20, 30, 40, 50 });
for (int i = 0; i < 100; i++)
Console.Write(r.Next() + " ");
それともshuffle the arrayにしたいですか?
[編集]
配列をシャッフルするには、this postに示すFisher–Yates shuffleを使用することができます。
// https://stackoverflow.com/questions/108819/110570#110570
public class Shuffler
{
private Random rnd = new Random();
public void Shuffle<T>(IList<T> array)
{
int n = array.Count;
while (n > 1)
{
int k = rnd.Next(n);
n--;
T temp = array[n];
array[n] = array[k];
array[k] = temp;
}
}
}
あなたは、インターフェイスが上記Randomizer
クラスと同じようにしたい場合は、することができますクラスを使用するように変更してください。
public class Randomizer<T>
{
private readonly Shuffler _shuffler = new Shuffler();
private readonly IList<T> _numbers;
public Randomizer(IList<T> numbers)
{
_numbers = new List<T>(numbers);
_shuffler.Shuffle(_numbers);
}
volatile int idx = 0;
public T Next()
{
if (idx >= _numbers.Count)
{
_shuffler.Shuffle(_numbers);
idx = 0;
}
return _numbers[idx++];
}
}
コードはで、スレッドセーフではないであるため、Next
メソッドを複数のスレッドから同時に呼び出すことができる場合は、いくつかのロックを実装する必要があります。
ok、それは動作しますが、私は、randomizerが繰り返さないために配列から生成するnumberをキックしたいと思います。 – MAB
@ActuallyMAB:あなたは配列をシャッフルすることについて話しています([SOの答えへのリンクは私の記事の最後です](http://stackoverflow.com/questions/108819/best-way-to-randomize-a- string-array-in-c))。すべての配列番号がなくなったときに何が起こるべきかを明確にすることができますか?再編して再開すべきか?または例外をスローしますか? – Groo
私は実際には数字を繰り返さないことを望みます。たとえば、結果は次のようになります。5-9-5-12。 – MAB
Seed標準System.Randomクラスからの値を持つクラス?すべての配列項目に依存する乱数が必要な場合は、それらをすべてXORします。このような
public static Random BuildSeededRandom(int[] data)
{
if (data == null || data.Length < 1)
return new Random();
int xor = 0;
foreach (var i in data)
xor ^= i;
return new Random(xor);
}
- 1. 与えられた数字のリストからJavaで乱数を生成する方法
- 2. 乱数を与える文字列に対するObjective-cの整数?
- 3. C#乱数int - 謎を生成する
- 4. C# - フィールドに乱数を生成する
- 5. 乱数を生成するC++ +1
- 6. 数値の確率を与えられた範囲内で乱数を生成する方法
- 7. Cauchyから乱数生成
- 8. Cネストされた関数で乱数を生成する
- 9. Cで-nからnまで乱数を生成
- 10. C++乱数生成とPythonの違い
- 11. C/C++プリプロセッサで一連の乱数を生成する方法
- 12. 短い乱数から長い乱数を生成する方法は?
- 13. 与えられた範囲でN個の乱数を生成し、合計の合計を計算する
- 14. PHPで乱数を生成する
- 15. Haskellで乱数を生成する
- 16. jinja2で乱数を生成する
- 17. 低い数値を与える確率が高い乱数発生器?
- 18. 乱数生成
- 19. C#でクラスのコンストラクタで乱数を生成する方法
- 20. 物理プロセスシミュレーションで乱数を生成することは可能ですか?
- 21. iPhone SDK用のObjective Cで乱数を生成する
- 22. 乱数のグループを生成する
- 23. Cで範囲[0、n)の乱数を生成しますか?
- 24. どのようにC#で乱数を生成しますか?
- 25. このコードで乱数を生成する場所はどこですか?
- 26. 1から10の範囲の乱数を生成する
- 27. CUDAのガウス分布から乱数を生成する
- 28. スパーク - 乱数生成
- 29. ATMega乱数生成
- 30. 乱数生成器
アレイから乱数を選択しますか?または乱数ジェネレータの「シード」として配列を使用しますか? –
私は種を入れたいです。 – MAB
それから私の答えを見てください(問題を解決すればそれを受け入れてください)。 –