[英]Unzip iterator of references to tuples into two collections of references
我在切片&[(T, U)]
有一個Iterator<Item = &(T, U)>
。 我想將此迭代器解壓縮到其組件中(即,獲取(Vec<&T>, Vec<&U>)
)。
銹通過提供解壓功能.unzip()
上的方法Interator
:
points.iter().unzip()
不幸的是,這不能按.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()
現在可以使用,但是我有點奇怪。 特別是,Rust標准庫提供的distribute_ref
似乎是一個相當簡單的操作。 我猜它是或者我找不到它,或者我沒有以正確的方式接近它。
有一個更好的方法嗎?
有一個更好的方法嗎?
“更好”有點主觀。 您可以使函數更短:
fn distribute_ref<T, U>(x: &(T, U)) -> (&T, &U) {
(&x.0, &x.1)
}
終身省音允許省略一生的注釋在這種情況下。
您可以使用閉包執行相同的操作:
points.iter().map(|&(ref a, ref b)| (a, b)).unzip()
根據任務,克隆數據就足夠了。 特別是在這種情況下,引用u8
占用的空間是u8
本身的4或8倍。
points().iter().cloned().unzip()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.