这就是我目前正在做的:

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);
}

输出为:

["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"]

如果可能的话,也不要用 crate .

推荐答案

你不能直接在char秒的范围内迭代,所以通过一点施法,我们可以做到:

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>

或者,将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<_>>();

Rust相关问答推荐

如何定义使用拥有的字符串并返回拥有的Split的Rust函数?

为什么单元类型(空元组)实现了`Extend`trait?

什么样的 struct 可以避免使用RefCell?

值为可变对象的不可变HashMap

限制未使用的泛型导致编译错误

当第二个`let`依赖于第一个`let()`时,如何在一行中有多个`let()`?

在Rust中宏的表达式中提取对象

如何循环遍历0..V.len()-1何时v可能为空?

考虑到Rust不允许多个可变引用,类似PyTorch的自动区分如何在Rust中工作?

Tokio';s io::用Cursor拆分<;Vec<;u8>>;赢得';t get the full writted data

Rust 重写函数参数

面临意外的未对齐指针取消引用:地址必须是 0x8 的倍数,但为 0x__错误

如何异步记忆选项中的 struct 字段

从函数返回 u32 的数组/切片

Cargo:如何将整个目录或文件包含在功能标志中?

为什么这个闭包没有比 var 长寿?

将 (T, ()) 转换为 T 安全吗?

你能用 Rust 和 winapi 制作 Windows 桌面应用程序吗?

如果返回类型是通用的,我可以返回 &str 输入的一部分吗?

为什么我不能将元素写入 Rust 数组中移动的位置,但我可以在元组中完成