HarmonyOS RandomUtil 随机数生成全攻略:整数、浮点数、布尔值一次搞定
文章目录
- 背景
- 总览方法
- getRandomBoolean:随机布尔值
- getRandomInt:随机整数
- getRandomNumber:随机浮点数
- getRandomLimit:生成 [0, limit) 范围内的随机整数
- 三个数字随机方法对比
- getRandomDataBlob 和 getRandomUint8Array:随机字节数据
- 写在最后
背景
近期发现一款很有意思的HarmonyOS 三方库, 地址 @pura/harmony-utils(V1.4.0) , 作者是"桃花镇童长老", 我这里也是直接通过该作者公布的源码进行案例编写进行,写了到目前写了一部分demo ,感觉确实很有帮助,这里呢也是开始写一个系列的演示demo 供大家参考。如有帮助可以在OpenHarmony中进行下载安装进行使用哦
案例demo导航展示
↓↓↓↓↓↓接下来言归正传 ↓↓↓↓
日常开发里,随机数的需求很常见:随机排序、抽奖、生成测试数据、随机颜色……虽然 ArkTS 有原生的Math.random(),但RandomUtil封装了更丰富的方法,用起来更方便。
总览方法
先来看下这个三方库的方法有哪些
getRandomBoolean:随机布尔值
最简单的一个,随机返回true或false:
this.Btn('生成随机 Boolean','#4A90E2',()=>{constv=RandomUtil.getRandomBoolean();this.addLog(`getRandomBoolean() →${v}`);})使用场景:
- A/B 测试中随机给用户分配实验组
- 游戏里随机触发某个事件(50% 概率)
- 生成随机测试数据时随机设置布尔字段
getRandomInt:随机整数
生成指定范围内的随机整数(包含两端边界值):
this.Btn(`getRandomInt(${this.intMin},${this.intMax})`,'#5A8DEE',()=>{constv=RandomUtil.getRandomInt(this.intMin,this.intMax);this.addLog(`getRandomInt(${this.intMin},${this.intMax}) →${v}`);})this.Btn('getRandomInt() 默认范围','#5A8DEE',()=>{constv=RandomUtil.getRandomInt();this.addLog(`getRandomInt() →${v}`);})Demo 里有两个输入框让你设置 min 和 max:
Row({space:8}){TextInput({text:this.intMin.toString(),placeholder:'min'}).layoutWeight(1).height(38).fontSize(13).type(InputType.Number).onChange(v=>{this.intMin=parseInt(v)||0;})TextInput({text:this.intMax.toString(),placeholder:'max'}).layoutWeight(1).height(38).fontSize(13).type(InputType.Number).onChange(v=>{this.intMax=parseInt(v)||100;})}实际运行结果:
getRandomInt(1, 100)→ 1 到 100 之间的随机整数(包含 1 和 100)getRandomInt()→ 默认范围内的随机整数
使用场景:抽奖序号生成、随机选取数组索引、骰子点数(getRandomInt(1, 6))
getRandomNumber:随机浮点数
生成指定范围内的随机浮点数:
this.Btn('getRandomNumber(10, 50)','#7B68EE',()=>{constv=RandomUtil.getRandomNumber(10,50);this.addLog(`getRandomNumber(10, 50) →${v}`);})实际运行结果:getRandomNumber(10, 50)→ 类似23.847...这样的浮点数
和getRandomInt的区别:getRandomInt返回整数,getRandomNumber返回带小数的浮点数。
使用场景:
- 生成随机坐标(需要精确的经纬度)
- 生成随机价格(需要小数)
- 模拟传感器数据
getRandomLimit:生成 [0, limit) 范围内的随机整数
和getRandomInt的区别是:getRandomLimit的范围是[0, limit)(不含 limit),即从 0 开始,最大值是 limit-1:
this.Btn('getRandomLimit(20)','#9B59B6',()=>{constv=RandomUtil.getRandomLimit(20);this.addLog(`getRandomLimit(20) →${v}(范围[0,20))`);})实际运行结果:getRandomLimit(20)→ 0 到 19 之间的整数
使用场景:随机选取数组中的一个元素时,getRandomLimit(array.length)直接作为索引使用:
constitems=['苹果','香蕉','橙子','草莓'];constrandomIndex=RandomUtil.getRandomLimit(items.length);constrandomItem=items[randomIndex];// 随机选一个水果三个数字随机方法对比
| 方法 | 范围 | 类型 | 典型使用 |
|---|---|---|---|
getRandomBoolean() | true/false | boolean | 随机判断 |
getRandomInt(min, max) | [min, max] | integer | 随机整数,有范围 |
getRandomInt() | 默认范围 | integer | 快速随机整数 |
getRandomNumber(min, max) | [min, max) | float | 随机浮点数 |
getRandomLimit(limit) | [0, limit) | integer | 随机数组索引 |
getRandomDataBlob 和 getRandomUint8Array:随机字节数据
有时候需要生成随机的二进制数据,比如测试数据、加密随机盐:
this.Btn('getRandomDataBlob(8)','#E67E22',()=>{constblob=RandomUtil.getRandomDataBlob(8);this.addLog(`getRandomDataBlob(8).data → [${Array.from(blob.data).join(',')}]`);})this.Btn('getRandomUint8Array(6)','#E67E22',()=>{constarr=RandomUtil.getRandomUint8Array(6);this.addLog(`getRandomUint8Array(6) → [${Array.from(arr).join(',')}]`);})实际运行结果:
getRandomDataBlob(8)→ 8 个随机字节,每次结果不同,比如[23, 187, 45, 201, 7, 156, 89, 234]getRandomUint8Array(6)→ 6 个随机字节的 Uint8Array
DataBlob和Uint8Array的区别:
DataBlob是 HarmonyOS 特有的类型,有.data属性(本质上就是Uint8Array)Uint8Array是标准的 JavaScript 类型,更通用
使用场景:加密操作需要随机盐(salt)时使用这两个方法生成。
写在最后
这篇把RandomUtil里数值相关的随机方法都过了一遍。下一篇讲字符串随机和颜色随机,以及 UUID 生成——这些在实际项目里用得也很多。
