mirror of
https://github.com/rust-lang-nursery/rust-cookbook
synced 2024-11-24 20:43:07 +00:00
Use gen_range instead of rand::choose (#527)
This commit is contained in:
parent
353ccf46cc
commit
99e3d6b333
1 changed files with 15 additions and 10 deletions
|
@ -2,25 +2,30 @@
|
|||
|
||||
[![rand-badge]][rand] [![cat-os-badge]][cat-os]
|
||||
|
||||
Randomly generates a string of given length ASCII characters with custom user-defined bytestring, with [`choose`].
|
||||
Randomly generates a string of given length ASCII characters with custom
|
||||
user-defined bytestring, with [`gen_range`].
|
||||
|
||||
```rust
|
||||
extern crate rand;
|
||||
|
||||
use rand::seq::SliceRandom;
|
||||
|
||||
fn main() {
|
||||
use rand::Rng;
|
||||
const CHARSET: &[u8] = b"ABCDEFGHIJKLMNOPQRSTUVWXYZ\
|
||||
abcdefghijklmnopqrstuvwxyz\
|
||||
0123456789)(*&^%$#@!~";
|
||||
|
||||
const PASSWORD_LEN: usize = 30;
|
||||
let mut rng = rand::thread_rng();
|
||||
let password: Option<String> = (0..30)
|
||||
.map(|_| Some(*CHARSET.choose(&mut rng)? as char))
|
||||
|
||||
let password: String = (0..PASSWORD_LEN)
|
||||
.map(|_| {
|
||||
let idx = rng.gen_range(0, CHARSET.len());
|
||||
// This is safe because `idx` is in range of `CHARSET`
|
||||
char::from(unsafe { *CHARSET.get_unchecked(idx) })
|
||||
})
|
||||
.collect();
|
||||
|
||||
println!("{:?}", password);
|
||||
}
|
||||
```
|
||||
|
||||
[`choose`]: https://docs.rs/rand/*/rand/trait.Rng.html#method.choose
|
||||
[`gen_range`]: https://docs.rs/rand/*/rand/trait.Rng.html#method.gen_range
|
||||
|
|
Loading…
Reference in a new issue