This commit is contained in:
Rowan Torbitzky-Lane 2025-03-22 15:03:18 -05:00
parent b2fe34eb06
commit f71d4bc902
4 changed files with 83 additions and 2 deletions

7
ch8/hash-maps/Cargo.lock generated Normal file
View File

@ -0,0 +1,7 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "hash-maps"
version = "0.1.0"

6
ch8/hash-maps/Cargo.toml Normal file
View File

@ -0,0 +1,6 @@
[package]
name = "hash-maps"
version = "0.1.0"
edition = "2021"
[dependencies]

66
ch8/hash-maps/src/main.rs Normal file
View File

@ -0,0 +1,66 @@
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.
}

View File

@ -26,6 +26,8 @@ fn main() {
let s_total = format!("{s1}-{s2}-{s3}");
// stopped here:
// https://rust-book.cs.brown.edu/ch08-02-strings.html#internal-representation
// Rust doesn't allow indexing of Strings.
// UTF-8 characters can take over 2 bytes which makes it
// not nice for indexing. For rush, just use a vec of chars
// straight for the string list.
}