有没有一种简单的方法可以在Rust中生成小写和大写英文字母?

Gol*_*hem 6 string rust

这就是我到目前为止所做的事情:

fn main() {
    let a = (0..58).map(|c| ((c + 'A' as u8) as char).to_string())
                       .filter(|s| !String::from("[\\]^_`").contains(s) )
                       .collect::<Vec<_>>();    

    println!("{:?}", a);
}
Run Code Online (Sandbox Code Playgroud)

输出是:

["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]
Run Code Online (Sandbox Code Playgroud)

如果可能的话也没有板条箱.

lje*_*drz 8

有很多选择; 你可以做到以下几点:

fn main() {
    let alphabet = String::from_utf8(
        (b'a'..=b'z').chain(b'A'..=b'Z').collect()
    ).unwrap();

    println!("{}", alphabet);
}
Run Code Online (Sandbox Code Playgroud)

这样您就不需要记住ASCII码了.


Jan*_*ner 5

你不能直接迭代一系列的chars,所以通过一点点投射,我们可以做到这一点:

let alphabet = (b'A'..=b'z')           // Start as u8
        .map(|c| c as char)            // Convert all to chars
        .filter(|c| c.is_alphabetic()) // Filter only alphabetic chars
        .collect::<Vec<_>>();          // Collect as Vec<char>
Run Code Online (Sandbox Code Playgroud)

或者,结合mapfilter进入filter_map

let alphabet = (b'A'..=b'z')                               // Start as u8
        .filter_map(|c| {
            let c = c as char;                             // Convert to char
            if c.is_alphabetic() { Some(c) } else { None } // Filter only alphabetic chars
        })          
        .collect::<Vec<_>>();
Run Code Online (Sandbox Code Playgroud)

  • @Boiethios [是](https://en.wikipedia.org/wiki/Basic_Latin_(Unicode_block)),它是 rustc 使用的 unicode 标准。 (2认同)