我在切片Iterator<Item = &(T, U)>
上有一个&[(T, U)]
。我想将此迭代器解压缩到其组件中(即获取(Vec<&T>, Vec<&U>)
)。
Rust通过.unzip()
上的Interator
方法提供解压缩功能:
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标准库提供。我猜它也是,我无法找到它,或者我没有以正确的方式接近它。
有更好的方法吗?