gpt4 book ai didi

data-structures - 尝试:一次不能多次借用 `_`作为可变项

转载 作者:行者123 更新时间:2023-12-03 11:47:31 25 4
gpt4 key购买 nike

我想为Trie实现一些基本方法。

use std::collections::HashMap;

#[derive(Debug)]
struct TrieNode {
chs: HashMap<char, TrieNode>,
value: Option<i32>,
}

#[derive(Debug)]
struct Trie {
root: TrieNode,
}

impl Trie {
fn new() -> Trie {
Trie {
root: TrieNode {
chs: HashMap::new(),
value: None,
},
}
}

fn add_string(&mut self, string: String, value: i32) {
let mut current_node = &mut self.root;
for c in string.chars() {
current_node = current_node.chs.entry(c).or_insert(TrieNode {
chs: HashMap::new(),
value: None,
});
}
current_node.value = Some(value);
}

fn delete(&mut self, key: &String) -> Option<i32> {
if key.is_empty() {
// if key is empty, no need to delete
return None;
}
let mut current_node = &mut self.root;
for (ind, ch) in key.chars().enumerate() {
match current_node.chs.get_mut(&ch) {
Some(node) => {
if ind < key.len() - 1 {
current_node = node;
}
}
None => return None,
}
}
// here current_node is actually the previous node of the deleted node
let temp = current_node.chs.remove(&key.chars().last().unwrap());
match temp {
Some(node) => node.value,
None => None,
}
}
}
delete方法用于从Trie中删除键,并返回与该键对应的值。但是,出现以下错误。
error[E0499]: cannot borrow `current_node.chs` as mutable more than once at a time
--> src/main.rs:118:19
|
118 | match current_node.chs.get_mut(&ch) {
| ^^^^^^^^^^^^^^^^ mutable borrow starts here in previous iteration of loop

最佳答案

我不太确定借位检查器在哪里被绊倒,但是您可以通过悬挂if检查来解决它:

    let mut current_node = &mut self.root;
for (ind, ch) in key.chars().enumerate() {
if ind < key.len() - 1 {
match current_node.chs.get_mut(&ch) {
Some(node) => {
current_node = node;
}
None => return None,
}
}
}
它甚至跳过检查叶节点是否存在,但是您的 remove(匹配已经涵盖了这种情况。

另外,您的 ind < key.len() - 1检查假定最后一个字符为ascii。对于您的用例可能是正确的,但是如果不是,则可以使用 this answer进行迭代,直到倒数第二个字符为止。

关于data-structures - 尝试:一次不能多次借用 `_`作为可变项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64627482/

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