Comment générer des nombres aléatoires à l'aide de Dart?
Utilisez la classe Random
de Dart:math
:
import 'Dart:math';
main() {
var rng = new Random();
for (var i = 0; i < 10; i++) {
print(rng.nextInt(100));
}
}
Ce code a été testé avec Dart VM et Dart2js, au moment de la rédaction de ce document.
Si vous avez besoin de nombres aléatoires sécurisés cryptographiquement (par exemple pour le cryptage) et que vous êtes dans un navigateur, vous pouvez utiliser le cryptographie DOM API :
int random() {
final ary = new Int32Array(1);
window.crypto.getRandomValues(ary);
return ary[0];
}
Cela fonctionne dans Dartium, Chrome et Firefox, mais probablement pas dans d'autres navigateurs car il s'agit d'une API expérimentale.
Voici un extrait pour générer une liste de nombres aléatoires
import 'Dart:math';
main() {
var rng = new Random();
var l = new List.generate(12, (_) => rng.nextInt(100));
}
Cela va générer une liste de 12 entiers de 0 à 99 (inclus).
Une API aléatoire sécurisée vient d'être ajoutée à Dart:math
new Random.secure()
Dart:math
Random
a ajouté un constructeursecure
renvoyant un générateur aléatoire cryptographiquement sécurisé qui lit à partir de la source d'entropie fournie par l'embedder pour chaque valeur aléatoire générée.
qui délègue à window.crypto.getRandomValues()
dans le navigateur et au système d'exploitation (comme urandom
sur le serveur)
Une solution alternative pourrait être d'utiliser le code suivant DRandom . Cette classe doit être utilisée avec une graine. Il fournit une interface familière à ce que vous attendez de .NET, il a été porté à partir de Random.cs de mono. Ce code peut ne pas être sécurisé pour la cryptographie et n'a pas été testé statistiquement.
Je viens d'écrire cette petite classe pour générer Normal Des nombres aléatoires ... c'était un bon point de départ pour la vérification que je dois faire. (Ces ensembles se répartiront sur une courbe en forme de "cloche".) La graine sera définie de manière aléatoire, mais si vous voulez pouvoir recréer un ensemble, vous pouvez simplement passer une graine spécifique et le même ensemble sera généré.
S'amuser...
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);
Ensuite, vous pouvez simplement l'utiliser comme ceci pour vérifier la moyenne des ensembles de 1000 nums générés entre une limite basse et haute. Les valeurs sont stockées dans la classe afin d'être accessibles après instanciation.
_swarmii
utiliser cette bibliothèque http://Dart.googlecode.com/svn/branches/bleeding_Edge/Dart/lib/math/random.Dart fourni un bon générateur aléatoire qui je pense sera bientôt inclus dans le sdk J'espère que ça aide