首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在两个其他数组的范围之间创建一个随机数组?

如何在两个其他数组的范围之间创建一个随机数组?
EN

Stack Overflow用户
提问于 2019-05-26 21:28:01
回答 1查看 592关注 0票数 0

我需要在给定的数组范围内生成一个随机20字节的数组。因为数组在Rust中是可比较的,所以这是可行的:

代码语言:javascript
复制
let low = [0u8; 20];
let high = [2u8; 20];
assert_eq!(true, low < high);
assert_eq!(false, low > high);
assert_eq!(true, low == [0u8; 20]);

对于这些界限:

代码语言:javascript
复制
let low: [u8; 20] = [98, 0, 1, 0, 2, 6, 99, 3, 0, 5, 23, 3, 5, 6, 11, 8, 0, 2, 0, 17];
let high: [u8; 20] = [99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1];

这将是一个有效的结果:

代码语言:javascript
复制
[98, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

这些不是:

代码语言:javascript
复制
[98, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2]

我想做一些类似的事情:

代码语言:javascript
复制
use rand::prelude::*;

fn main() {
    let low = [0u8; 20];
    let high = [2u8; 20];
    let value = rand::thread_rng().gen_range(low, high);
    println!("{:?}", value);
}

但我得到以下错误:

代码语言:javascript
复制
error[E0277]: the trait bound `[u8; 20]: rand::distributions::uniform::SampleUniform` is not satisfied
 --> src\main.rs:6:36
  |
6 |     let value = rand::thread_rng().gen_range(low, high);
  |                                    ^^^^^^^^^ the trait `rand::distributions::uniform::SampleUniform` is not implemented for `[u8; 20]`

我尝试实现SampleUniformUniformSampler,但没有太多成功。有没有简单的方法来实现这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-27 16:03:07

如果要将字节数组视为大整数,请使用启用了rand功能的num-bigint机箱:

代码语言:javascript
复制
use bigint::{ToBigInt, RandBigInt};

let low = -10000.to_bigint().unwrap();
let high = 10000.to_bigint().unwrap();
let b = rng.gen_bigint_range(&low, &high);

您也可以使用无符号整数而不是有符号整数。有一些方法可以在大端字节数组之间进行相互转换:

另请参阅:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56313926

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档