Vector 对于rust中的不同数据结构,是否可能有一个统一的迭代器接口?

Vector 对于rust中的不同数据结构,是否可能有一个统一的迭代器接口?,vector,rust,enums,hashmap,iterator,Vector,Rust,Enums,Hashmap,Iterator,我想要下面的东西 使用std::collections::HashMap; pub enum DiffStruct{ V(Vec), M(HashMap), } impl-DiffStruct{ fn to_iter(self)->impl into迭代器{ 匹配自我{ DiffStruct::V(vec)=>vec.iter().into_iter(), DiffStruct::M(map)=>map.values().into_iter(), } } } fn main(){ 设v:Vec=

我想要下面的东西

使用std::collections::HashMap;
pub enum DiffStruct{
V(Vec),
M(HashMap),
}
impl-DiffStruct{
fn to_iter(self)->impl into迭代器{
匹配自我{
DiffStruct::V(vec)=>vec.iter().into_iter(),
DiffStruct::M(map)=>map.values().into_iter(),
}
}
}
fn main(){
设v:Vec=DiffStruct::v(Vec![1,2,3])to_iter().collect();
}


因此,我可以最小化我的代码的
收集
行为以获得最佳性能,但它不会编译任何解决方法来实现这一点?

假设您想拥有
DiffStruct
的所有权,而不只是在收集其值时借用它:

使用std::collections::HashMap;
pub enum DiffStruct{
V(Vec),
M(HashMap),
}
impl-DiffStruct{
fn至iter(自)->接线盒{
匹配自我{
DiffStruct::V(vec)=>Box::new(vec.into_iter()),
DiffStruct::M(map)=>Box::new(map.into_iter().map(|(|,v)| v)),
}
}
}
fn main(){
设vec_值=vec![1,2,3];
让mut map_values=HashMap::new();
映射值。插入(1,1);
映射值。插入(2,2);
映射值。插入(3,3);
设ds_vec=DiffStruct::V(vec_值);
设ds_map=DiffStruct::M(map_值);
让已收集的_从_vec:vec=ds_vec.to_iter().collect();
让收集的_从_-map:Vec=ds_-map.to_-iter().collect();
}

另见


我并不100%清楚您是要迭代引用值,还是复制值,或者其他什么,但下面是另一个问题的答案之一。而且,而是迭代引用。(是否迭代引用或值的选择与是否使用
框无关;您可以混合和匹配。)