【发布时间】:2020-09-22 09:37:41
【问题描述】:
给定一个结构集合(向量/切片)。如何在每个结构中的某些字段上创建组合迭代器?
下面是使用flat_map的具体尝试:
struct Game {
home_team: u8,
away_team: u8,
}
fn teams(games: &[Game]) -> impl Iterator<Item = u8> {
games
.iter()
.flat_map(|game| [game.home_team, game.away_team].iter().map(|x| x.clone()))
}
fn main() {
let data = &[
Game {
home_team: 1,
away_team: 2,
},
Game {
home_team: 1,
away_team: 3,
},
];
let non_unique_teams: Vec<u8> = teams(data).collect();
}
我的实际用例非常相似。特别是,构成迭代器基础的字段实现了Copy,使得克隆非常好。
我的直觉告诉我,这应该可行,因为我正在克隆我需要从传入切片中“获取”的唯一东西。显然,我对借用检查器的理解很差,无法掌握这一点。
【问题讨论】: