簡単な方法は.filter()でa~z以外を消してしまう方法でしょうか。
rust
1extern crate rand;
2use rand::Rng;
3
4fn main(){
5 const CHARS: &'static [u8] = b"abcdefghijklmnopqrstuvwxyz";
6 let mut rng = rand::thread_rng();
7
8 // (1)
9 let id: String = rng.gen_ascii_chars()
10 .filter(|&x| x >= 'a' && x <= 'z')
11 .take(8)
12 .collect();
13 println!("{}", id);
14
15 // (2)
16 let id: String = (0..8).map(|_| *rng.choose(&CHARS).unwrap() as char)
17 .collect();
18 println!("{}", id)
19
20 // (3)
21 let id: String = (0..8).map(|_| rng.gen_range(b'a', b'z'+1) as char)
22 .collect();
23 println!("{}", id);
24}
(1)の方法は手っ取り早いですが、定数時間で終わらないので少しインフォーマルです。
(2)の方法はテーブルを用意しているので大げさな感じがします。
(3)の方法もありかもしれません。b'z'+1
しているのはgen_range()が [low, high)
だからです。(追記)
AsciiGeneratorの実装もテーブル参照のようです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/12/18 03:43