dev_prokit 之随机生成double、bool、int数组,可选安全/非安全,可设随机数是否重复
往期优选推荐
推荐指数: ⭐️⭐️⭐️⭐️⭐️
》fam 和 flutter_gen 相比优点《
-
fam
不需要在项目的pubspec.yaml
文件的dev_dependencies
引入任何东西;而flutter_gen
需要引入flutter_gen_runner
。 -
fam
在导入资源后只需要执行fam run
即可;而flutter_gen
需要执行dart run build_runner build
。需要注意的是dart run build_runner build
是很多代码自动生成的运行指令(多语言、json解析、rividerpod...等)。所以一旦执行就需要很长时间才能完成,而fam
拥有独立的体系,便捷快速! -
fam
的资源管理类在项目中使用简短;而flutter_gen
需要使用.
语法一直到资源文件,然后再通过.path
获取资源路径,这很麻烦! -
fam
拥有独立的系统体系;flutter_gen
和多语言的使用有一定的冲突。
推荐指数: ⭐️⭐️⭐️⭐️⭐️
该篇文章包含了 dev_prokit 所有功能介绍和示例的目录。此文章能够让开发者快速的了解 dev_prokit 都提供了那些功能,以及能更快速的找到自己需要的功能介绍和应用。
本期功能介绍
一、起因
公司近期面临一个新的挑战,即需要从一个数组(元素不重复)中随机抽取N个独一无二的元素,每个元素均不可重复出现。面对这一需求,我们同样拥有简洁而高效的解决方案。核心思路如下:首先,利用随机数生成器来获取与所需元素数量相匹配的、不重复的数组索引值;随后,凭借这些精心挑选的索引值,我们就能精准地从原始数组中抽取对应的元素。其核心任务,即是从数组中精准地提取出特定数量的非重复索引值,以确保在处理数据时能够保持高度的准确性与可靠性。
二、随机数的安全和非安全
当我们谈及Random
类的使用时,其实蕴含了两种截然不同的方法路径:安全的与非安全的。那么,这两者的界定究竟是什么呢?接下来,让我们一同深入探索,揭开这其中的奥秘。
首先,要理解“安全”与“非安全”的概念,我们需从它们的核心差异出发。在安全的方法中,通常会有更为严格的随机性保障和防篡改机制,确保生成的随机数具有高度的不可预测性和随机性,从而在各种应用场景下都能提供可靠的安全保障。
而相对而言,非安全的方法可能在随机性的保障上稍显逊色,可能更容易受到某些外部因素的影响,导致生成的随机数不够随机,甚至可能被预测或篡改。
三、方法参数介绍
dev_prokit 提供的 RandomList
支持 bool
、int
、double
三种类型的数组生成。 其详细的方法和参数介绍如下 :
-
nextBool(int length,{int? seed})
生成布尔值类型的数组, 参数介绍:
length
: 生成数组的长度seed
: 生成随机数的种子
-
secureNextBool(int length)
安全模式生成布尔值类型的数组, 参数介绍:
length
: 生成数组的长度
-
nextInt(int length, {int? seed, int? max, int start = 0, bool repeat = true })
生成 Int 值类型的数组, 参数介绍:
length
: 生成数组的长度seed
: 生成随机数的种子max
: 随机数的最大值,其值的范围是0 <= value < max
。start
: 随机值的起始范围值, 其值的范围是start <= value < start + max
。repeat
: 生成的随机数是否重复。
-
secureNextInt(int length, {int? max, int start = 0, bool repeat = true })
安全模式生成 Int 值类型的数组, 参数介绍:length
: 生成数组的长度max
: 随机数的最大值,其值的范围是0 <= value < max
。start
: 随机值的起始范围值, 其值的范围是start <= value < start + max
。repeat
: 生成的随机数是否重复。
-
nextDouble(int length, {int? max, int? seed, int start = 0, bool repeat = true })
生成 Double 值类型的数组, 参数介绍:
length
: 生成数组的长度,seed
: 生成随机数的种子,max
: 随机数的最大值,其值的范围是0 <= value < max
。start
: 随机值的起始范围值, 其值的范围是start <= value < start + max
,repeat
: 生成的随机数是否重复。
-
secureNextDouble(int length, {int? max, int start = 0, bool repeat = true })
安全模式生成 Double 值类型的数组, 参数介绍:
-
length
: 生成数组的长度, -
max
: 随机数的最大值,其值的范围是0 <= value < max
。 -
start
: 随机值的起始范围值, 其值的范围是start <= value < start + max
, -
repeat
: 生成的随机数是否重复。
-
四、小试牛刀
- bool 类型数组
RandomList.nextBool(3), // [false, true, true]
RandomList.nextBool(3, seed: 1), // [false, true, false]
// 使用 seed 之后下次再次生成的随机结果和上次相同, 再次调用:
RandomList.nextBool(3, seed: 1), // [false, true, false]
RandomList.secureNextBool(2); // [true, false]
- int 类型数组
// 不设置 max
// 其取值范围是 0 <= value < 5; 输出结果为: [4, 4, 3, 2, 1]
RandomList.nextInt(5);
// 设置 max
// 其取值范围是 0 <= value < 6; 输出结果为: [1, 3, 4, 2, 5]
// 注意: length <= max
RandomList.nextInt(5, max:6);
// 设置 start
// 其取值范围是 5 <= value < 11; 输出结果为: [8, 7, 9, 6, 8]
// 注意: length <= max
RandomList.nextInt(5, max:6, start:5);
// 设置 seed
// [8,6,10,10,9]
RandomList.nextInt(5, max:6, start:5, seed:2);
// 设置 seed 之后生成的随机数,在下次再次调用时,生成的结果和上次相同。
// [8,6,10,10,9]
RandomList.nextInt(5, max:6, start:5, seed:2);
// 随机数是否重复
// [6, 5, 10, 9, 7]
RandomList.nextInt(5, max: 6, start: 5, repeat: false);
RandomList.secureNextInt(5, max:6, start:5); // [8,6,10,10,9]
- double 类型数组
// 不设置 max
// [0.5977280537211054, 0.6109972248356862, 0.2885383019995692]
RandomList.nextDouble(3);
// 设置 max
// [0.2868694228030033, 2.1083113572595162, 0.5984247453274796]
RandomList.nextDouble(3, max: 2.5);
// 设置 start
//[2.7120537418076114, 3.6471079832978655, 3.9799251738881054]
RandomList.nextDouble(3, max: 2.5, start: 2);
// 设置 seed
// 第一次调用
// [2.001958980773398, 2.9080150379750913, 2.7173759606318324]
RandomList.nextDouble(3, max: 2.5, start: 2, seed: 2);
// 第二次调用
// [2.001958980773398, 2.9080150379750913, 2.7173759606318324]
RandomList.nextDouble(3, max: 2.5, start: 2, seed: 2);
// 随机数是否重复
// [2.001958980773398, 2.9080150379750913, 2.7173759606318324]
RandomList.nextDouble(3, max: 2.5, start: 2, seed: 2, repeat: false)
// [2.650031024041975, 4.397284067594666, 3.3972238513654016]
RandomList.secureNextDouble(3, max: 2.5, start: 2, repeat: false)
五、鼓励与支持
这便是 dev_prokit 提供的方法之一。以编写代码较少、功能完善、代码运行强壮、支持面广等形式来开发 dev_prokit 包。 如果你有 Idea
或者 Opinion
,那请你点击此处 》》Idea & Opinion《《 把它留下吧!如果你在使用该功能后感觉还可以,它能够给你的项目开发带来便捷,那请你为之点个⭐️ dev_prokit ⭐️ 吧!分享给更多需要它的开发者。
转载自:https://juejin.cn/post/7378363694940373002