ch8 done
This commit is contained in:
parent
b2fe34eb06
commit
f71d4bc902
7
ch8/hash-maps/Cargo.lock
generated
Normal file
7
ch8/hash-maps/Cargo.lock
generated
Normal 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
6
ch8/hash-maps/Cargo.toml
Normal 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
66
ch8/hash-maps/src/main.rs
Normal 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.
|
||||
}
|
@ -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.
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user