如何在dart中生成伪随机数

发布于 2025-01-11 04:44:25 字数 594 浏览 1 评论 0原文

我目前正在尝试在 dart 列表中选取一个随机项目。为此,我想生成一个伪随机数(我的种子),它将作为我要在列表中选择一个元素的索引。

首先,我想从今天的日期生成种子,如下所示:

import 'package:intl/intl.dart';
final String datePattern = 'yyyy-MM-dd';
final String todays_date = DateFormat(datePattern).format(DateTime.now());

并找到一种方法将其转换为整数(伪随机数),以便能够使用该整数作为索引从列表中选取项目。

这样,例如,对于打开 flutter 应用程序的 10 个用户,他们每天都会获得列表中的相同元素。

List<String> dic = ['a','b','c','d','e','f','g','h','i','j']
var randomItem = (dic.toList()..shuffle()).elementAt(myPseudoRandomNumber);

如何获取上面显示的变量“myPseudoRandomNumber”?

I'm currently trying to pick up a random item in a list in dart. For this, I would like to generate a pseudo-random number (my seed) which will be the index where I'm gonna pick an element of my list.

First, I would like to generate the seed from today's date as follow :

import 'package:intl/intl.dart';
final String datePattern = 'yyyy-MM-dd';
final String todays_date = DateFormat(datePattern).format(DateTime.now());

And find a way to convert it as an integer (pseudo-random number) to be able to pick up an item from a list using as index this integer.

This way, for 10 users opening a flutter application for example, they will get the same element of the list everyday.

List<String> dic = ['a','b','c','d','e','f','g','h','i','j']
var randomItem = (dic.toList()..shuffle()).elementAt(myPseudoRandomNumber);

How to get this variable 'myPseudoRandomNumber' shown above?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

南笙 2025-01-18 04:44:25

默认的 Random 构造函数 < em>确实创建了一个可播种的伪随机数生成器。文档表明,实现可能会在 Dart 版本之间发生变化,但我的理解是,这种情况不会发生,也不是轻易完成的事情,因为它几乎肯定会破坏现有代码。

如果您想要更强的一致性保证(或者如果您需要一个跨语言或平台生成相同值的 PRNG),那么您需要使用特定的 PRNG 实现(例如 梅森旋转器)。

The default Random constructor does create a seedable pseudo-random number generator. The documentation indicates that the implementation could change across Dart versions, but my understanding is that that's not expected to happen and is not something that would be done lightly since it almost certainly would break existing code.

If you want a stronger consistency guarantee (or if you need a PRNG that generates the same values across languages or platforms), then you would need to use a specific PRNG implementation (e.g. such as an implementation of Mersenne Twister).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文