67 lines
1.7 KiB
Rust
67 lines
1.7 KiB
Rust
use std::collections::HashMap;
|
|
|
|
fn main() {
|
|
let mut scores = HashMap::new();
|
|
|
|
scores.insert(String::from("Blue"), 10);
|
|
scores.insert(String::from("Yellow"), 50);
|
|
|
|
let team_name = String::from("Blue");
|
|
let score = scores.get(&team_name).copied().unwrap_or(0);
|
|
|
|
for (key, value) in &scores {
|
|
println!("{key}: {value}");
|
|
}
|
|
|
|
// hash maps and ownership
|
|
// Copy trait implementers copy the values into the hash map.
|
|
// Owned values like String, values get moved
|
|
|
|
let field_name = String::from("Favorite color");
|
|
let field_value = String::from("Blue");
|
|
|
|
let mut map = HashMap::new();
|
|
map.insert(field_name, field_value);
|
|
|
|
// Below is invalid use after move
|
|
// println!("{field_name}");
|
|
|
|
// Updating a hash map
|
|
|
|
// overwriting
|
|
|
|
let mut scores = HashMap::new();
|
|
|
|
scores.insert(String::from("Blue"), 10);
|
|
scores.insert(String::from("Blue"), 20);
|
|
|
|
println!("{scores:?}");
|
|
|
|
// adding a key and value only if a key isn't present
|
|
let mut scores = HashMap::new();
|
|
scores.insert(String::from("Blue"), 10);
|
|
|
|
scores.entry(String::from("Yellow")).or_insert(50);
|
|
scores.entry(String::from("Blue")).or_insert(50);
|
|
|
|
println!("{scores:?}");
|
|
|
|
// updating a value based on the old value
|
|
|
|
let text = "hello world wonderful world";
|
|
let mut map = HashMap::new();
|
|
|
|
for word in text.split_whitespace() {
|
|
let count = map.entry(word).or_insert(0);
|
|
*count += 1;
|
|
}
|
|
|
|
println!("{map:?}");
|
|
|
|
// Custom hashing functions
|
|
//
|
|
// Why: Default one is secure but kinda slow
|
|
// Can use a different hashing function if too slow
|
|
// Talks about how in chapter 10.
|
|
}
|