gpt4 book ai didi

rust - str 和 string 之间不匹配

转载 作者:行者123 更新时间:2023-11-29 08:11:38 25 4
gpt4 key购买 nike

我这个小程序,但我不能让它运行。我在 &strString 之间遇到类型不匹配或类似的错误。

这就是程序

use std::fs::File;
use std::io;
use std::io::prelude::*;
use std::io::BufReader;
use std::collections::HashMap;

fn main() {
let mut f = File::open("/home/asti/class.csv").expect("Couldn't open file");
let mut s = String::new();
let reader = BufReader::new(f);
let lines: Result<Vec<_>,_> = reader.lines().collect();


let mut class_students: HashMap<String, Vec<String>> = HashMap::new();
for l in lines.unwrap() {
let mut str_vec: Vec<&str> = l.split(";").collect();
println!("{}", str_vec[2]);
let e = class_students.entry(str_vec[2]).or_insert(vec![]);
e.push(str_vec[2]);
}

println!("{}", class_students);


}

我经常收到这个错误:

hello_world.rs:20:38: 20:48 error: mismatched types:
expected `collections::string::String`,
found `&str`
(expected struct `collections::string::String`,
found &-ptr) [E0308]
hello_world.rs:20 let e = class_students.entry(str_vec[2]).or_insert(vec![]);
^~~~~~~~~~

我试过换行

let mut str_vec: Vec<&str> = l.split(";").collect();

let mut str_vec: Vec<String> = l.split(";").collect();

但是我得到了这个错误:

hello_world.rs:16:53: 16:60 error: the trait `core::iter::FromIterator<&str>` is not implemented for the type `collections::vec::Vec<collections::string::String>` [E0277]
hello_world.rs:16 let mut str_vec: Vec<String> = l.split(";").collect();

那么我如何从 l 而不是 &str 中提取 String 呢?此外,如果有更好的解决方案,请告诉我,因为我对这项技术的新手可能对所有人来说都是显而易见的。

最佳答案

比评论更详细的答案:

您的示例最初编译失败的原因是因为您试图将一个切片插入到一个字符串向量中。因为原始类型 str 实现了 ToString 特性,所以您可以调用 to_string() 方法将其转换为 String,从而为您的向量提供正确的类型。

另一种选择是 to_owned(),如 this 中所示。线程。

关于rust - str 和 string 之间不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35732065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com