Как создать случайные числа с помощью Dart?
Как создать случайные числа в Dart?
Ответ 1
Используйте Random
класс из dart:math
:
import 'dart:math';
main() {
var rng = new Random();
for (var i = 0; i < 10; i++) {
print(rng.nextInt(100));
}
}
Этот код был протестирован с помощью Dart VM и dart2js на момент написания этой статьи.
Ответ 2
Если вам нужны криптографически безопасные случайные числа (например, для шифрования), и вы находитесь в браузере, вы можете использовать API криптографии DOM:
int random() {
final ary = new Int32Array(1);
window.crypto.getRandomValues(ary);
return ary[0];
}
Это работает в Dartium, Chrome и Firefox, но, скорее всего, не в других браузерах, поскольку это экспериментальный API.
Ответ 3
Альтернативным решением может быть использование следующего кода DRandom. Этот класс следует использовать с семенем. Он обеспечивает знакомый интерфейс к тому, что вы ожидаете в .NET, он был перенесен из моно Random.cs. Этот код не может быть безопасным для криптографии и не был статистически протестирован.
Ответ 4
Здесь приведен фрагмент для создания списка случайных чисел
import 'dart:math';
main() {
var rng = new Random();
var l = new List.generate(12, (_) => rng.nextInt(100));
}
Это приведет к созданию списка из 12 целых чисел от 0 до 99 (включительно).
Ответ 5
Безопасный случайный API был добавлен только к dart:math
new Random.secure()
dart:math
Random
добавлен конструкторsecure
, возвращающий криптографически безопасный случайный генератор, который считывает из источника энтропии, предоставленного для каждого генерируемого случайного значения.
который делегирует window.crypto.getRandomValues()
в браузере и ОС (например, urandom
на сервере)
Ответ 6
используйте эту библиотеку http://dart.googlecode.com/svn/branches/bleeding_edge/dart/lib/math/random.dart предоставили хороший случайный генератор, который, я думаю, будет включен в sdk, скоро надеюсь, что он поможет
Ответ 7
Просто написал этот маленький класс для генерации случайных чисел Обычный... это была достойная отправная точка для проверки, которую мне нужно сделать. (Эти наборы будут распределяться по "колоколообразной" форме кривая.) Семя будет установлено случайным образом, но если вы хотите иметь возможность повторно сгенерировать набор, вы можете просто передать определенное семя и создать тот же набор.
Удачи...
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 чисел, созданных между минимумом и максимумом. Значения сохраняются в классе, поэтому к ним можно получить доступ после создания экземпляра.
_swarmii