< 返回版块

zephyrzoom 发表于 2023-09-10 11:54

Tags:hashmap

hashmap中存储的数据是btreeset类型,在取出来btreeset插入数据时报错,这个报错的原因是什么?怎么修复这个报错?

let mut split_sort = HashMap::new();
init(&mut split_sort, start_char);
let train_data = File::open(FILE_PATH)?;
let reader = BufReader::new(train_data);
let line_iter = reader.lines().map(|l| l.unwrap());
line_iter.for_each(|line| {
    for c in start_char.chars() {
        if line.starts_with(c) {
            split_sort.get(&c).unwrap().insert(&line);
        }
    }
});

报错信息如下:

error[E0596]: cannot borrow data in a `&` reference as mutable
  --> src\main.rs:40:17
   |
40 |                 split_sort.get(&c).unwrap().insert(&line);
   |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot borrow as mutable

评论区

写评论
作者 zephyrzoom 2023-09-10 17:57

原来如此,你的示例太妙了

--
👇
Wybxc: HashMap::get 拿到的是不可变引用,可以用 get_mut 代替

不过这种表套表的结构最好用 entry 方法,例如:

let mut hashtbl = HashMap::new();
let c = '1';
hashtbl.entry(&c).and_modify(|tree| tree.insert(1, 2)).or_insert_with(|| BTreeMap::new());
Wybxc 2023-09-10 15:44

HashMap::get 拿到的是不可变引用,可以用 get_mut 代替

不过这种表套表的结构最好用 entry 方法,例如:

let mut hashtbl = HashMap::new();
let c = '1';
hashtbl.entry(&c).and_modify(|tree| tree.insert(1, 2)).or_insert_with(|| BTreeMap::new());
作者 zephyrzoom 2023-09-10 13:52

问题是这行代码split_sort.get(&c).unwrap().insert(&line);报错cannot borrow data in a & reference as mutable,不知道为什么会有这个报错,怎么改能消除这个报错?

--
👇
苦瓜小仔: 不知道怎么改代码,我可以理解。但不晓得正确提问,我不理解 :)

要想别人节省你的解决问题的时间,首先节省别人理解你问题的时间。

苦瓜小仔 2023-09-10 13:43

不知道怎么改代码,我可以理解。但不晓得正确提问,我不理解 :)

要想别人节省你的解决问题的时间,首先节省别人理解你问题的时间。

1 共 4 条评论, 1 页