2017-05-10 2 views

Antwort

7

Jedes Mal, wenn Sie ein Doppel Look-up eines Schlüssels haben, müssen Sie Entry API denken.

Mit dem Eintrag API, können Sie einen Punkt zu einem Schlüssel-Wert-Paar erhalten und kann:

  • lesen Sie die Taste,
  • Lese-/Änderungs- den Wert,
  • vollständig entfernen Sie den Eintrag (immer der Schlüssel und der Wert zurück).

Es ist extrem leistungsfähig.

In diesem Fall:

use std::collections::HashMap; 
use std::collections::hash_map::Entry; 

fn remove(hm: &mut HashMap<i32, String>, index: i32) { 
    if let Entry::Occupied(o) = hm.entry(index) { 
     if o.get().is_empty() { 
      o.remove_entry(); 
     } 
    } 
} 

fn main() { 
    let mut hm = HashMap::new(); 
    hm.insert(1, String::from("")); 

    remove(&mut hm, 1); 

    println!("{:?}", hm); 
} 
0

Ich tat dies am Ende:

match self.data.entry(index) { 
    Occupied(mut occupied) => { 
     let is_empty = { 
      let ks = occupied.get_mut(); 
      ks.remove(primary_key); 
      ks.is_empty() 
     }; 
     if is_empty { 
      occupied.remove(); 
     } 

    }, 
    Vacant(_) => unreachable!() 
} 
Verwandte Themen