簡體   English   中英

str和字符串之間不匹配

[英]mismatches between str and string

我這個小程序,但是我不能運行它。 我在&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呢? 另外,如果有更好的解決方案,請告訴我,因為我對這項技術的新穎性可能對所有人都是顯而易見的。

比評論更詳細的答案:

您的示例最初無法編譯的原因是,您正在嘗試將切片插入Strings向量中。 因為原始類型str實現了ToString特征,所以您可以調用to_string()方法將其轉換為String,從而為您的向量提供正確的類型。

線程所示,另一個選項是to_owned()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM