将对元组的引用的迭代器解压缩为两个引用集合

时间:2018-03-04 07:35:11

标签: reference iterator rust tuples ownership

我在切片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标准库提供。我猜它也是,我无法找到它,或者我没有以正确的方式接近它。

有更好的方法吗?

0 个答案:

没有答案