我的函数返回一个元组的引用Vec
,但我需要一个元组Vec
:
use std::collections::HashSet;
fn main() {
let maxs: HashSet<(usize, usize)> = HashSet::new();
let mins: HashSet<(usize, usize)> = HashSet::new();
let intersection = maxs.intersection(&mins).collect::<Vec<&(usize, usize)>>();
}
我该如何进行转换?
错误:
19 | maxs.intersection(&mins).collect::<Vec<&(usize, usize)>>()
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected tuple, found reference
|
= note: expected type `std::vec::Vec<(usize, usize)>`
found type `std::vec::Vec<&(usize, usize)>`
我正在使用 for
循环进行转换,但是我不喜欢它,我认为应该有一种更符合惯用法的方式:
for t in maxs.intersection(&mins).collect::<Vec<&(usize, usize)>>().iter() {
output.push(**t);
}
collect()
之前添加一些内容而不是之后。非常好!但是(我现在只是好奇)如果我们已经有了一个引用向量,并且我们想将它们转换为值向量,那会发生什么?在这种情况下,我们应该也使用cloned()
吗? - Igor Chubinret_tup
正是如此。 - hellowClone
的每种类型 - 也许您可以展示通用版本,它确实适用于实现Clone
的任何类型? - Shepmasterinto_iter
” - 实际上你是可以使用的,这个函数确实拥有切片,只不过它也存在同样的问题。 - Shepmasteriter()
函数来遍历切片的。你是指这个吗?如果是,原因就在于into_iter
会消费掉Vec
,但你只有一个借用的切片(&[T]
),你没有所有权,因此只能迭代它的引用。 - hellow