Dartを使用して乱数を生成するにはどうすればよいですか?
Random
class from Dart:math
:
import 'Dart:math';
main() {
var rng = new Random();
for (var i = 0; i < 10; i++) {
print(rng.nextInt(100));
}
}
このコードは、この記事の執筆時点で、Dart VMおよびDart2jsでテストされています。
cryptographically-secure乱数(暗号化など)が必要で、ブラウザを使用している場合は、 DOM暗号を使用できますAPI :
int random() {
final ary = new Int32Array(1);
window.crypto.getRandomValues(ary);
return ary[0];
}
これはDartium、Chrome、Firefoxで動作しますが、これは実験的なAPIであるため、他のブラウザでは動作しない可能性があります。
これが乱数のリストを生成するためのスニペットです
import 'Dart:math';
main() {
var rng = new Random();
var l = new List.generate(12, (_) => rng.nextInt(100));
}
これにより、0から99(両端を含む)の12個の整数のリストが生成されます。
安全なランダムAPIが_Dart:math
_に追加されました
_new Random.secure()
_
_
Dart:math
_Random
は、すべての生成されたランダム値に対して埋め込みによって提供されるエントロピーソースから読み取る暗号的に安全なランダムジェネレーターを返すsecure
コンストラクターを追加しました。
ブラウザのwindow.crypto.getRandomValues()
およびOSに委任します(サーバーのurandom
など)
別の解決策は、次のコードを使用することです DRandom 。このクラスはシードとともに使用する必要があります。これは、.NETで期待するものに馴染みのあるインターフェイスを提供し、monoのRandom.csから移植されました。このコードは暗号化に対して安全ではない可能性があり、統計的にテストされていません。
Normal乱数を生成するためにこの小さなクラスを作成しました...これは、私が行う必要のあるチェックのきちんとした出発点でした。 (これらのセットは「ベル」型の曲線で分布します。)シードはランダムに設定されますが、セットを再生成したい場合は、特定のシードを渡すだけで同じセットが生成されます。
楽しむ...
class RandomNormal {
num _min, _max, _sum;
int _nEle, _seed, _hLim;
Random _random;
List _rNAr;
//getter
List get randomNumberAr => _rNAr;
num _randomN() {
int r0 = _random.nextInt(_hLim);
int r1 = _random.nextInt(_hLim);
int r2 = _random.nextInt(_hLim);
int r3 = _random.nextInt(_hLim);
num rslt = _min + (r0 + r1 + r2 + r3) / 4000.0; //Add the OS back in...
_sum += rslt; //#DEBUG ONLY
return( rslt );
}
RandomNormal(this._nEle, this._min, this._max, [this._seed = null]) {
if (_seed == null ) {
Random r = new Random();
_seed = r.nextInt(1000);
}
_hLim = (_max - _min).ceil() * 1000;
_random = new Random(_seed);
_rNAr = [];
_sum = 0;//#DEBUG ONLY
h2("RandomNormal with k: ${_nEle}, Seed: ${_seed}, Min: ${_min}, Max: ${_max}");//#DEBUG ONLY
for(int n = 0; n < _nEle; n++ ){
num randomN = _randomN();
//p("randomN = ${randomN}");
LIST_add( _rNAr, randomN );
}
h3("Mean = ${_sum/_nEle}");//#DEBUG ONLY
}
}
new RandomNormal(1000, 80, 120);
new RandomNormal(1000, 80, 120);
new RandomNormal(1000, 80, 120);
new RandomNormal(1000, 80, 120);
new RandomNormal(1000, 80, 120);
new RandomNormal(1000, 80, 120);
new RandomNormal(1000, 80, 120);
次に、このように使用して、下限と上限の間で生成された1000 numのセットの平均を確認できます。値はクラスに格納されるため、インスタンス化後にアクセスできます。
_swarmii
このライブラリを使用してください http://Dart.googlecode.com/svn/branches/bleeding_Edge/Dart/lib/math/random.Dart は良いランダムを提供しましたSDKに含まれるジェネレーターはすぐに役立つと思います