<div dir="ltr">I have a tree of Nodes where each node might have a name. I'm trying to convert the tree into a HashMap of named nodes, but my code is getting extremely complex due to the fact that I cannot pass &mut HashMap around.<div>

<br></div><div>let mut named_nodes = HashMap::new();</div><div>let nodes = vec!( ... );</div><div>named_nodes = self.collect_node_names(&named_nodes, &nodes);</div><div>println!('{}', named_nodes);</div><div>

<br></div><div><div>fn collect_node_names(&self, map: &HashMap<String, Gc<node::Node>>,</div><div>    nodes: &Vec<Gc<node::Node>>) -> HashMap<String, Gc<node::Node>> {</div>

<div>  let mut local_map: HashMap<String, Gc<node::Node>> = HashMap::new();</div><div>  for (k,v) in map.iter() {</div><div>    local_map.insert(k.clone(), *v);</div><div>  }</div><div>  for n in nodes.iter() {</div>

<div>    for (k,v) in self.collect_node_names(&local_map, &n.subnodes).iter() {</div><div>      local_map.insert(k.clone(), *v);</div><div>    }</div><div>    match <a href="http://n.name">n.name</a> {</div><div>
      Some(ref name) => {</div>
<div>        if local_map.contains_key(name) {</div><div><br></div><div>        } else {</div><div>          local_map.insert(name.clone(), *n);</div><div>        }</div><div>      },</div><div>      None => (),</div>
<div>
    }</div><div>  }</div><div>  local_map</div><div>}</div><div><br></div><div>this one works, but it's bloated and slow. Any hints on how to improve the code?</div><div><br></div>-- <br>Sincerely,<br>Vladimir "Farcaller" Pouzanov<br>

<a href="http://farcaller.net/">http://farcaller.net/</a>
</div></div>