如果值是数据结构的一部分,我很难理解如何以惯用方式查找、追加或创建新的向量,在本例中是红黑树。
我在用
this Red Black Tree implementation
计划是获取一个可变的值引用,如果它存在,我将附加到该值(而不是
None
)创建一个新的向量并将其移动到
RBTree
如果键没有值。我的代码看起来是这样的,为了简洁,稍微修改了一下,所以请原谅任何粗心的错误:
struct Obj {
tree: RBTree<i32, Vec<String>>,
}
let mut obj = Obj {
tree: RBTree::new(),
};
let k = 5;
let v = "whatever";
match obj.tree.get_mut(k) {
None => {
let mut vec: Vec<Node> = Vec::new();
vec.push(v);
book.tree.insert(k, vec);
}
Some(vec) => vec.push(v),
}
问题是,当我检查树是否存在时,我得到了一个可变的引用,因为如果它确实存在,我想通过附加到向量来对它进行变异。但是,如果它不存在,我想插入一个新的节点,该节点尝试执行可变借用,因此在这一行上得到“第二个可变借用发生在这里”
book.tree.insert(k, vec);
.
我希望能够深入了解如何执行这个查找或创建,以便它能够编译并且是线程安全的。我想我使用的图书馆也可能有问题。还没有资格对此发表评论。