【发布时间】:2018-08-12 01:59:27
【问题描述】:
我在切片 &[(T, U)] 上有一个 Iterator<Item = &(T, U)>。我想将此迭代器解压缩到它的组件中(即获取(Vec<&T>, Vec<&U>))。
Rust 通过 Interator 上的 .unzip() 方法提供解压缩功能:
points.iter().unzip()
不幸的是,这不能按原样工作,因为.unzip() 期望迭代器项的类型是元组;我的是一个元组的引用。
为了解决这个问题,我尝试编写一个函数,在对元组的引用和引用元组之间进行转换:
fn distribute_ref<'a, T, U>(x: &'a (T, U)) -> (&'a T, &'a U) {
(&x.0, &x.1)
}
然后我可以map 遍历生成的迭代器来获得.unzip() 可以处理的东西:
points.iter().map(distribute_ref).unzip()
现在可以了,但我感觉有点奇怪。特别是,distribute_ref 似乎是一个由 Rust 标准库提供的相当简单的操作。我猜它要么是但我找不到它,要么我没有以正确的方式接近这个。
有没有更好的方法来做到这一点?
【问题讨论】:
标签: reference iterator rust tuples ownership