Rust Collections
# Struct
# Classic Struct
struct ColorClassicStruct {
red: u8,
green: u8,
blue: u8,
}
fn classic_c_structs() {
let green = ColorClassicStruct {
red: 0,
green: 255,
blue: 0,
};
}
# Tuple Like Struct
struct ColorTupleStruct(u8, u8, u8);
fn tuple_structs() {
let green = ColorTupleStruct(0, 255, 255);
assert_eq!(green.0, 0);
assert_eq!(green.1, 255);
assert_eq!(green.2, 0);
}
# Unit Like Struct
struct UnitStruct;
fn unit_structs() {
let unit_struct = UnitStruct;
let message = format!("{:?}s are fun!", unit_struct);
assert_eq!(message, "UnitStructs are fun!");
}
# Struct Update Syntax
like JavaScript’s fill
Make sure you put the .. at the end of the struct.
struct User {
active: bool,
username: String,
email: String,
sign_in_count: u64,
}
fn main() {
// --snip--
let user1 = User {
email: String::from("someone@example.com"),
username: String::from("someusername123"),
active: true,
sign_in_count: 1,
};
let user2 = User {
email: String::from("another@example.com"),
..user1
};
}
# Enum
enum Message {
Quit,
Move { x: i32, y: i32 },
Write(String),
ChangeColor(i32, i32, i32),
}
fn process(&mut self, message: Message) {
match message {
Message::ChangeColor((r, g, b)) => self.change_color((r, g, b)),
Message::Echo(s) => self.echo(s),
Message::Move(p) => self.move_position(p),
Message::Quit => self.quit()
}
}
Quithas no data associated with it at all.Movehas named fields like a struct does.Writeincludes a singleString.ChangeColorincludes threei32values.
# Vector
let v: Vec<i32> = Vec::new(); //empty
let v = vec![1, 2, 3]; // or
v.push(5);
v.push(6);
v.push(7);
v.push(8);
# Strings
# Hash Maps
use std::collections::HashMap
basket.entry(Fruit::Banana).or_insert(50); // Adding a Key and Value Only If a Key Isn’t Present
# Box
pub enum List {
Cons(i32, Box<List>),
Nil,
}
List::Cons(1, Box::new(List::Nil))