假设我有一个组织ID的载体
let orgs = vec![1, 3, 14, 12];
然后我在每个组织上调用.iter()
以获取每个组织的事件,其中函数get_events_for()
返回Vec<Event>
let events = orgs
.iter()
.map(|org_id| {
get_events_for(org_id)
})
.collect();
当前,事件等于Vec<Vec<Event>>
,那么如何将其转换为Vec<Event>
?
答案 0 :(得分:3)
let events = orgs
.iter()
.flat_map(get_events_for)
.collect();
答案 1 :(得分:2)
使用此处已经给出的一些答案,这是一个更完整的实现形式:
#[derive(Debug)]
struct Event {
id: usize
}
fn main() {
let orgs = vec![1, 3, 14, 12];
let events: Vec<Event> = orgs
.iter()
.flat_map(|org_id| {
get_events_for(*org_id)
})
.collect();
println!("{:?}", events);
}
fn get_events_for(id: usize) -> Vec<Event> {
vec![Event {id}]
}
输出如下:
[Event { id: 1 }, Event { id: 3 }, Event { id: 14 }, Event { id: 12 }]