这就是我到目前为止所做的事情:
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)
如果可能的话也没有板条箱.
有很多选择; 你可以做到以下几点:
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码了.
你不能直接迭代一系列的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)
或者,结合map和filter进入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)
| 归档时间: |
|
| 查看次数: |
1829 次 |
| 最近记录: |