Я хотел бы сопоставить массив структур с массивом значений полей. Как бы я это сделал?
pub struct Person {
name: String
}
fn main() {
let my_people = vec![
Person {
name: "Bob".to_string(),
},
Person {
name: "Jill".to_string(),
},
Person {
name: "Rakim".to_string(),
},
];
//map my_people to ["Bob", "Jill", "Rakim"]
}
У вас есть два возможных решения, в зависимости от того, хотите ли вы клонировать имена или заимствовать их. Оба решения ниже:
pub struct Person {
name: String,
}
fn people_names_owned(people: &[Person]) -> Vec<String> {
people.iter().map(|p| p.name.clone()).collect()
}
fn people_names_borrowed(people: &[Person]) -> Vec<&str> {
people.iter().map(|p| p.name.as_ref()).collect()
}
fn main() {
let my_people = vec![
Person {
name: "Bob".to_string(),
},
Person {
name: "Jill".to_string(),
},
Person {
name: "Rakim".to_string(),
},
];
println!("{:?}", people_names_owned(&my_people));
println!("{:?}", people_names_borrowed(&my_people));
}
Третьим вариантом может быть использование списка пользователей в процессе и возврат собственных строк без необходимости клонирования.