web-dev-qa-db-fra.com

Comment générer des nombres aléatoires dans Dart?

Comment générer des nombres aléatoires à l'aide de Dart?

69
Seth Ladd

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.

93
Seth Ladd

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.

13
Sam McCall

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).

10
Mark E. Haase

Une API aléatoire sécurisée vient d'être ajoutée à Dart:math

new Random.secure()

Dart:mathRandom a ajouté un constructeur secure 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)

6
Günter Zöchbauer

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.

3
adam-singer

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

2
george koller

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

1
kaiser avm