gpt4 book ai didi

rust - 了解 Rust 中的 filter_map

转载 作者:行者123 更新时间:2023-12-03 11:41:15 24 4
gpt4 key购买 nike

我正在尝试获取 ages所有 Person谁有一些第二名。我可以使用 filter 做到这一点和 map分别如下,但我想知道我们是否可以使用 filter_map在 rust 。
但我无法弄清楚。

struct Person {
pub first_name: String,
pub last_name: Option<String>,
pub age: i32,
}


fn main() {
let mut persons: Vec<Person> = Vec::new();
persons.push(Person {
first_name: "Asnim".to_string(),
last_name: None,
age: 1,
});
persons.push(Person {
first_name: "Fahim".to_string(),
last_name: Some("Ansari".to_string()),
age: 2,
});
persons.push(Person {
first_name: "Shahul".to_string(),
last_name: None,
age: 6,
});
persons.push(Person {
first_name: "Mujeeb".to_string(),
last_name: Some("Rahuman".to_string()),
age: 6,
});

let ages_of_people_with_second_name_using_seperate_filter_map: Vec<i32> = persons
.iter()
.filter(|p| p.last_name.is_some())
.map(|p| p.age)
.collect();

println!("{:?}", ages_of_people_with_second_name)
}

最佳答案

是的。如果您阅读了 documentation for filter_map 你会意识到你有多近。甚至可以使用 Option 's map帮你解决

喜欢:

let ages_of_people_with_second_name_using_seperate_filter_map: Vec<i32> = persons
.iter()
.filter_map(|p| p.last_name.map(|_| p.age))
.collect();

或者更简单的方法,使用 match图案:

let ages_of_people_with_second_name_using_seperate_filter_map: Vec<i32> = persons
.iter()
.filter_map(|p| match p.last_name {
Some(_) => Some(p.age),
None => None
})
.collect();

关于rust - 了解 Rust 中的 filter_map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62339080/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com