mirror of
https://github.com/ahgamut/rust-ape-example.git
synced 2024-05-15 01:52:42 +00:00
74 lines
1.8 KiB
Rust
74 lines
1.8 KiB
Rust
// ./src/error/iter_result.md
|
|
|
|
|
|
fn part0() {
|
|
let strings = vec!["tofu", "93", "18"];
|
|
let numbers: Vec<_> = strings
|
|
.into_iter()
|
|
.map(|s| s.parse::<i32>())
|
|
.collect();
|
|
println!("Results: {:?}", numbers);
|
|
}
|
|
|
|
fn part1() {
|
|
let strings = vec!["tofu", "93", "18"];
|
|
let numbers: Vec<_> = strings
|
|
.into_iter()
|
|
.filter_map(|s| s.parse::<i32>().ok())
|
|
.collect();
|
|
println!("Results: {:?}", numbers);
|
|
}
|
|
|
|
fn part2() {
|
|
let strings = vec!["42", "tofu", "93", "999", "18"];
|
|
let mut errors = vec![];
|
|
let numbers: Vec<_> = strings
|
|
.into_iter()
|
|
.map(|s| s.parse::<u8>())
|
|
.filter_map(|r| r.map_err(|e| errors.push(e)).ok())
|
|
.collect();
|
|
println!("Numbers: {:?}", numbers);
|
|
println!("Errors: {:?}", errors);
|
|
}
|
|
|
|
fn part3() {
|
|
let strings = vec!["tofu", "93", "18"];
|
|
let numbers: Result<Vec<_>, _> = strings
|
|
.into_iter()
|
|
.map(|s| s.parse::<i32>())
|
|
.collect();
|
|
println!("Results: {:?}", numbers);
|
|
}
|
|
|
|
fn part4() {
|
|
let strings = vec!["tofu", "93", "18"];
|
|
let (numbers, errors): (Vec<_>, Vec<_>) = strings
|
|
.into_iter()
|
|
.map(|s| s.parse::<i32>())
|
|
.partition(Result::is_ok);
|
|
println!("Numbers: {:?}", numbers);
|
|
println!("Errors: {:?}", errors);
|
|
}
|
|
|
|
fn part5() {
|
|
let strings = vec!["tofu", "93", "18"];
|
|
let (numbers, errors): (Vec<_>, Vec<_>) = strings
|
|
.into_iter()
|
|
.map(|s| s.parse::<i32>())
|
|
.partition(Result::is_ok);
|
|
let numbers: Vec<_> = numbers.into_iter().map(Result::unwrap).collect();
|
|
let errors: Vec<_> = errors.into_iter().map(Result::unwrap_err).collect();
|
|
println!("Numbers: {:?}", numbers);
|
|
println!("Errors: {:?}", errors);
|
|
}
|
|
|
|
pub fn main() {
|
|
part0();
|
|
part1();
|
|
part2();
|
|
part3();
|
|
part4();
|
|
part5();
|
|
}
|
|
|