- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
考虑以下代码(最小示例):
use std::collections::HashMap;
fn main() {
let mut map: HashMap<usize, i128> = HashMap::new();
map.insert(1, -5);
map.insert(2, 6);
map.insert(3, 7);
for i in map.keys() {
if *i == 3 {
continue;
}
*map.get_mut(&3).unwrap() += map[i];
}
}
借用检查员会提示:
cannot borrow `map` as mutable because it is also borrowed as immutable
但是,在这种情况下,我可以确定我所做的突变不会干扰不可变引用。对于 Vec
,我会在这里使用 split_at_mut
- Rust 中的 HashMap
有等效的吗?
编辑:
正如评论所指出的,让我更具体地说明我想要解决的问题。我想实现将图中的顶点“合并”为一个顶点。为此,我创建了一个 HashMap
:
pub mergedVerticesList: HashMap<usize, HashSet<usize>>
它应该从一个顶点映射到已合并到该顶点的所有顶点。由于这可以递归完成,因此当撤消 u
和 merge_onto
之间的合并时,我想删除已合并到 merge_onto
中的所有顶点,因为来自 merge_onto
的 HashSet
的 u
。因此,代码如下所示:
for i in self.mergedVerticesList[v].iter() {
self.mergedVerticesList.get_mut(&merge_onto).unwrap().remove(i);
}
最佳答案
不,就 HashMap
而言,这是不可能的。您可以将单元格作为值来重新获得可变访问权限,但我强烈建议不要这样做。您不能将更改移出循环吗(它还可以节省每次迭代的重复查找)。一些东西的调子
use std::collections::HashMap;
fn main() {
let mut map: HashMap<usize, i128> = HashMap::new();
map.insert(1, -5);
map.insert(2, 6);
map.insert(3, 7);
let s = map.iter().filter_map(|(k, v)| if *k != 3 { Some(v) } else { None }).sum::<i128>();
*map.get_mut(&3).unwrap() += s;
println!("{:#?}", &map)
}
关于rust - HashMap 的 split_at_mut 等效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64187018/
考虑以下代码(最小示例): use std::collections::HashMap; fn main() { let mut map: HashMap = HashMap::new();
我遇到了“错误[E0495]:由于需求冲突,无法推断出 autoref 的适当生命周期”,这个简单的函数: fn assign_split_at_mut(s: &'b mut &'a mut [T],
Vec有两种方法: fn push(&mut self, value: T) fn split_at_mut(&mut self, mid: usize) -> (&mut [T], &mut [T]
有一个非常好的 split_at_mut 函数,它可以将 1 个切片分成 2 个...有没有办法撤消该操作,以便我可以再次返回到我的原始数组——假设我知道它们在内存中是连续的(因为我只是拆分它们) 问
我正在尝试从无法编译的嵌入式 Rust 示例中提取一些代码。许多这些旧的嵌入式示例无法编译,因为它们每晚都在使用,并且很快就会被破坏和忽视。 let mut buffer : [u8; 2048] =
我是一名优秀的程序员,十分优秀!