Vector 如何转换向量<;项目>;至Vec<;字符串>;?
我有以下对象,正在尝试转换Vector 如何转换向量<;项目>;至Vec<;字符串>;?,vector,rust,visibility,private,map-function,Vector,Rust,Visibility,Private,Map Function,我有以下对象,正在尝试转换Vec并检索CourseName pub struct Schools { pub courses: Vec<CourseName>, } pub struct CourseName(String); impl CourseName { pub fn as_str(&self) -> &str { &self.0[..] } } pub-struct学校{ 酒吧课程:Vec, } p
Vec
并检索CourseName
pub struct Schools {
pub courses: Vec<CourseName>,
}
pub struct CourseName(String);
impl CourseName {
pub fn as_str(&self) -> &str {
&self.0[..]
}
}
pub-struct学校{
酒吧课程:Vec,
}
pub结构CourseName(字符串);
impl CourseName{
发布fn as_str(&self)->&str{
&self.0[…]
}
}
试图获取Vec
,但我的以下方法不起作用
assigned_courses:Vec<String> = courses.iter().map(|c| c.clone().as_str()).collect()
assigned_courses:Vec=courses.iter().map(| c | c.clone().as_str()).collect()
获取以下错误:
无法从`std::iter::Iterator构建`Vec`类型的值`
更新:
工作示例:
#[派生(调试)]
发布结构CourseName(发布字符串);
fn课程到字符串(列表:&[CourseName])->Vec{
list.iter().map(| course | course.0.clone()).collect()
}
fn main(){
让课程:Vec=Vec[
CourseName(“a.to_string()),
CourseName(“b”。到_字符串())
];
让strings=courses\u到\u strings(&courses);
dbg!(字符串);
}
您所需要做的就是
克隆字符串而不是map
函数中的CourseName
元组结构,还可以将pub
可见性修饰符添加到内部字符串中映射
闭包接收&CourseName
以便克隆
只复制引用。相反,您需要的是访问元组并使用c.0
克隆内部字符串
let assigned_courses:Vec=courses.iter().map(|c | c.0.clone()).collect();
或者,如果对课程名称的引用足够多,则可以在内部字符串上使用as_str
let assigned_courses:Vec=schools.courses.iter().map(|c | c.0.as_str()).collect();
修复“私有字段”错误。您可以添加可见性修改器,例如
pub-struct-CourseName(发布字符串);
但是,最好将其保持为私有,并添加一个类似的方法作为\u str()
impl-CourseName{
发布fn as_str(&self)->&str{
&self.0
}
}
然后导致:
let assigned_courses:Vec=schools.courses.iter().map(|c | c.as_str().to_string()).collect();
或者,您也可以impl和/或forCourseName
,使所有内容更加通用化
假设CourseName
只是有一个键入的版本,而不是字符串。然后您可以改为impl forCourseName
pub struct Schools {
pub courses: Vec<CourseName>,
}
pub struct CourseName(String);
impl CourseName {
pub fn as_str(&self) -> &str {
&self.0[..]
}
}
使用std::fmt;
pub结构CourseName(字符串);
impl fmt::CourseName的显示{
fn fmt(&self,f:&mut fmt::Formatter)->fmt::Result{
写!(f,“{}”,self.0)
}
}
这允许您执行println!(“{},course”)
以及course.to_string()
let assigned_courses:Vec=schools.courses.iter().map(|c | c.to_string()).collect();
我得到类型的值
Vec`不能从std::iter::Iterator构建
注意,我添加了.0
并删除了as_str()
我遇到了一个问题,相应地更新了我的问题。我相应地更新了我的问题,实际上我有as_str()
方法,但它略有不同,我怎样才能处理你的解决方案呢。对不起,我是铁锈的新手,还在学习。@vallentin感谢无数次帮助学习铁锈的人。我真的很感谢你的努力和时间。你不仅帮助了我,还教了我一些很酷的技巧。我希望我能投更多的票!祝你周末愉快!获取以下错误`类型为Vec
的值无法从std::iter::Iterator
生成您是否转到游乐场链接并运行代码?它的编译和运行都很好。很难回答您的问题,因为它没有包含一个。我们无法说出代码中存在哪些板条箱(及其版本)、类型、特征、字段等。如果您试图重现您的错误(如果可能的话),或者在全新的货运项目中,那么我们将更容易帮助您,然后您的问题将包括附加信息。您可以使用以下方法减少在此处发布的原始代码。谢谢请回答您的问题,并粘贴您得到的准确和完整的错误-这将帮助我们了解问题所在,以便我们能够提供最好的帮助。有时,试图解释错误消息是很棘手的,而这实际上是错误消息的另一个重要部分。请使用直接运行编译器的消息,而不是IDE生成的消息,IDE可能试图为您解释错误。