【问题标题】:How to generate pseudo-random number in dart如何在飞镖中生成伪随机数
【发布时间】:2022-06-19 17:37:52
【问题描述】:

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

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

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

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

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

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

如何获得上面显示的这个变量“myPseudoRandomNumber”?

【问题讨论】:

  • 为什么不使用 Random 类?
  • 因为 random 会生成一个随机数(所以是的,我可以使用它,但不能单独使用)。我想从种子中生成一个随机数,如果种子没有改变,每次运行都会给我相同的结果。他在 C++ 中的等价物是:void srand(unsigned int seed):cplusplus.com/reference/cstdlib/srand
  • @Ma Jeed Random 类应该使用种子作为参数,但是你如何从字符串类型的日期将这个种子生成为整数
  • 那么你需要C++ srand 或Java Random 的Dart 等价物吗?

标签: list flutter date dart random


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2022-10-17
    • 2020-09-07
    • 2019-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-30
    • 2015-08-07
    • 1970-01-01
    相关资源
    最近更新 更多