我想做以下事情:
Vec某个键,并将其存储起来供以后使用.Vec则为该键创建一个空,但仍将其保留在变量中.如何有效地做到这一点?当然我以为我可以使用match:
use std::collections::HashMap;
// This code doesn't compile.
let mut map = HashMap::new();
let key = "foo";
let values: &Vec<isize> = match map.get(key) {
    Some(v) => v,
    None => {
        let default: Vec<isize> = Vec::new();
        map.insert(key, default);
        &default
    }
};
当我尝试它时,它给了我错误,如:
error[E0502]: cannot borrow `map` as mutable because it is also borrowed as immutable
  --> src/main.rs:11:13
   |
7  |     let values: &Vec<isize> = match map.get(key) {
   |                                     --- immutable borrow occurs …如何在Rust中创建HashMap文字?在Python中,我可以这样做:
hashmap = {
   'element0': {
       'name': 'My New Element',
       'childs': {
           'child0': {
               'name': 'Child For Element 0',
               'childs': {
                   ...
               }
           }
       }
   },
   ...
}
在Go中这样:
type Node struct {
    name string
    childs map[string]Node
}
hashmap := map[string]Node {
    "element0": Node{
        "My New Element",
        map[string]Node {
            'child0': Node{
                "Child For Element 0",
                map[string]Node {}
            }
        }
    }
}
我想在迭代器中添加一个元素.具体来说,我想创建一个迭代器,逐步完成序列[2,3,5,7,9,...].我能想到的最好的是
range_step_inclusive(2,2,1).chain(range_step_inclusive(3, max, 2))
但是第一个迭代器是将单个元素2作为迭代器的一种破解.是否有更惯用的方法来创建单元素迭代器(或将元素添加到迭代器中)?
我正在尝试创建一个DefaultHashMap基本上是包装器的结构,HashMap区别在于当获取不在地图中的键时,默认值将被放入该键并返回.
我做了get一个get_mut方法,这很好.现在我正在尝试实现Index并IndexMut围绕这些方法包装.在这里,我遇到了两个问题.
第一个问题是由于get当密钥不存在时必须改变结构的事实,它需要一个可变引用.然而,对于签名index的方法Index有&self代替&mut self,让我无法实现它.
这导致第二个问题,IndexMut需要Index实现.因此即使IndexMut没有实现问题,我也无法做到这一点,因为Index无法实现.
第一个问题很烦人,但可以理解.对于第二个,我不明白为什么要求就在那里.我想有办法解决它.现在我正在做以下事情,但我希望有人有更好的解决方案:
impl<K: Eq + Hash, V: Clone> Index<K> for DefaultHashMap<K, V> {
    type Output = V;
    fn index(&self, _: K) -> &V {
        panic!("DefautHashMap doesn't implement indexing without mutating")
    }
}
impl<K: Eq + Hash, V: Clone> IndexMut<K> for DefaultHashMap<K, V> {
    #[inline]
    fn index_mut(&mut …我HashMap使用默认值实现了换行,我想知道它是否安全.
当get被调用时,内部映射可以被调整大小和值(与先前获得的参考文献get)将被指向无效地址.我尝试使用"计算机科学中的所有问题都可以通过另一层次的间接解决"的想法来解决这个问题(Butler Lampson).我想知道这个技巧是否使这段代码安全.
use std::cell::UnsafeCell;
use std::collections::HashMap;
use std::hash::Hash;
pub struct DefaultHashMap<I: Hash + Eq, T: Clone> {
    default: T,
    map: UnsafeCell<HashMap<I, Box<T>>>,
}
impl<I: Hash + Eq, T: Clone> DefaultHashMap<I, T> {
    pub fn new(default: T) -> Self {
        DefaultHashMap {
            default: default,
            map: UnsafeCell::new(HashMap::new()),
        }
    }
    pub fn get_mut(&mut self, v: I) -> &mut T {
        let m = unsafe { &mut *self.map.get() };
        m.entry(v).or_insert_with(|| Box::new(self.default.clone()))
    }
    pub fn get(&self, …