Now that we know about vectors and hashmaps, let’s tackle something more challenging. In this exercise, we’ll build a system to manage and analyze student grades. This challenge will help you practice working with structs, hashmaps, vectors, and methods while managing a collection of data.
The focus here is on functionality. Ignore error handling for this challenge; assume the input is always valid.
You need to define the StudentGrades
struct, which contains a HashMap
of student names (String
) as keys and Student
structs as values. Each Student
struct should have the following fields:
name
: The name of the student (String
).grades
: A Vec<u8>
to store the student's grades.Implement the following methods for the StudentGrades
struct:
add_student(name: &str)
: Add a new student to the HashMap
. If the student already exists, do nothing.add_grade(name: &str, grade: u8)
: Add a grade to an existing student.get_grades(name: &str) -> &[u8]
: Retrieve the grades of a student as an immutable reference.HashMap
methods like entry
, insert
, and get
to manage student data.use std::collections::HashMap;pub struct Student { // 1. Define the fields pub name: String, pub grades: Vec<u8>}pub struct StudentGrades { // 2. Define the fields pub students: HashMap<String,Student>}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } // 3. Implement the methods pub fn add_student(&mut self, name: &str) { // Implement here self.students.insert(name.to_string(),Student{name:name.to_string(),grades:vec!()}); } pub fn add_grade(&mut self, name: &str, grade: u8) { // Implement here //self.students.entity(name) if let Some(s) = self.students.get_mut(name) { s.grades.push(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { // Implement here if let Some(name)=self.students.get(name) { name.grades.as_ref() } else { [].as_ref() } }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;#[derive(PartialEq)]pub struct Student { // 1. Define the fields pub name: String, pub grades: Vec<u8>}pub struct StudentGrades { // 2. Define the fields pub students: HashMap<String, Student>}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } // 3. Implement the methods pub fn add_student(&mut self, name: &str) { // Implement here if None == self.students.get(&name.to_string()){ self.students.insert(name.to_string(), Student{ name: name.to_string(), grades: Vec::new() }); } } pub fn add_grade(&mut self, name: &str, grade: u8) { // Implement here if let Some(value) = self.students.get_mut(name){ value.grades.push(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { // Implement here if let Some(value) = self.students.get(&name.to_string()){ let ret: &[u8] = value.grades.as_slice(); return ret; } else{ return &[]; } }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;#[derive(PartialEq)]pub struct Student { // 1. Define the fields pub name: String, pub grades: Vec<u8>}pub struct StudentGrades { // 2. Define the fields pub students: HashMap<String, Student>}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } // 3. Implement the methods pub fn add_student(&mut self, name: &str) { // Implement here if None == self.students.get(&name.to_string()){ self.students.insert(name.to_string(), Student{ name: name.to_string(), grades: Vec::new() }); } } pub fn add_grade(&mut self, name: &str, grade: u8) { // Implement here if let Some(value) = self.students.get_mut(name){ value.grades.push(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { // Implement here if let Some(value) = self.students.get(&name.to_string()){ let ret: &[u8] = value.grades.as_slice(); return ret; } else{ return &[]; } }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;pub struct Student { // 1. Define the fields pub name: String, pub grades: Vec<u8>}pub struct StudentGrades { // 2. Define the fields pub students: HashMap<String, Student>}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } // 3. Implement the methods pub fn add_student(&mut self, name: &str) { // Implement here if !self.students.contains_key(name) { let student = Student { name: name.to_string(), grades: Vec::new() }; self.students.insert(name.to_string(), student); } } pub fn add_grade(&mut self, name: &str, grade: u8) { // Implement here if let Some(student) = self.students.get_mut(name) { student.grades.push(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { // Implement here match self.students.get(name) { Some(student) => &student.grades, None => &[] } }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;pub struct Student { // 1. Define the fields pub name: String, pub grades: Vec<u8>,}pub struct StudentGrades { // 2. Define the fields pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } // 3. Implement the methods pub fn add_student(&mut self, name: &str) { // Implement here self.students.insert( name.to_string(), Student { name: name.to_string(), grades: Vec::new(), }, ); } pub fn add_grade(&mut self, name: &str, grade: u8) { // Implement here if let Some(student) = self.students.get_mut(name) { student.grades.push(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { // Implement here self.students .get(name) .map(|student| student.grades.as_slice()) .unwrap_or(&[]) }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;pub struct Student { // 1. Define the fields name: String, grades: Vec<u8>,}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: Vec::new(), }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.grades.push(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { match self.students.get(name) { Some(student) => &student.grades, None => &[], } }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;pub struct Student { // 1. Define the fields pub name: String, pub grades: Vec<u8>,}pub struct StudentGrades { // 2. Define the fields pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } // 3. Implement the methods pub fn add_student(&mut self, name: &str) { // Implement here self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: Vec::new() }); } pub fn add_grade(&mut self, name: &str, grade: u8) { // Implement here if let Some(student) = self.students.get_mut(name) { student.grades.push(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { // Implement here if let Some(student) = self.students.get(name) { return &student.grades } return &[] }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: Vec::new(), }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.grades.push(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { match self.students.get(name) { Some(student) => &student.grades, None => &[], } }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } // 3. Implement the methods pub fn add_student(&mut self, name: &str) { if !self.students.contains_key(&name.to_string()) { self.students.insert( name.to_string(), Student { name: name.to_string(), grades: Vec::new(), }, ); } } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.grades.push(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { match self.students.get(name) { Some(student) => &student.grades[..], None => &[], } }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;pub struct Student { // 1. Define the fields pub name: String, pub grades: Vec<u8>,}pub struct StudentGrades { // 2. Define the fields pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } // 3. Implement the methods pub fn add_student(&mut self, name: &str) { // Implement here let name_str = name.to_string(); let new_student = Student { name: name_str.clone(), grades: Vec::new(), }; self.students.insert(name_str, new_student); } pub fn add_grade(&mut self, name: &str, grade: u8) { // Implement here match self.students.get_mut(name) { Some(student) => { student.grades.push(grade); } None => {} } } pub fn get_grades(&self, name: &str) -> &[u8] { // Implement here let student = self.students.get(name); match student { Some(student) => &student.grades, None => &[], } }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;pub struct Student { name: String, grades: Vec<u8>,}pub struct StudentGrades { pub students: HashMap<String, Student>}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } // 3. Implement the methods pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: Vec::new()}); } pub fn add_grade(&mut self, name: &str, grade: u8) { self.students.entry(name.to_string()).and_modify(|student| student.grades.push(grade)); } pub fn get_grades(&self, name: &str) -> &[u8] { self.students.get(name).expect("No such student").grades.as_slice() }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;pub struct Student { // 1. Define the fields pub grades: Vec<u8>,}pub struct StudentGrades { // 2. Define the fields pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } // 3. Implement the methods pub fn add_student(&mut self, name: &str) { // Implement here self.students.insert(name.to_string(), Student {grades: vec![]}); } pub fn add_grade(&mut self, name: &str, grade: u8) { // Implement here self.students.get_mut(name).unwrap().grades.push(grade); } pub fn get_grades(&self, name: &str) -> &[u8] { // Implement here &self.students.get(name).unwrap().grades }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;pub struct Student { // 1. Define the fields pub name: String, pub grades: Vec<u8>,}pub struct StudentGrades { // 2. Define the fields pub students: HashMap<String, Student>}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } // 3. Implement the methods pub fn add_student(&mut self, name: &str) { // Implement here self.students.insert(name.to_string(), Student { name: name.to_string(), grades: Vec::new() }); } pub fn add_grade(&mut self, name: &str, grade: u8) { // Implement here self.students.get_mut(name).unwrap().grades.push(grade); } pub fn get_grades(&self, name: &str) -> &[u8] { // Implement here &self.students[name].grades }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;pub struct Student { // 1. Define the fields pub name: String, pub grades: Vec<u8> }pub struct StudentGrades { // 2. Define the fields pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } // 3. Implement the methods pub fn add_student(&mut self, name: &str) { // Implement here let student = Student { name: name.to_string(), grades: Vec::new() }; self.students.insert(name.to_string(), student); } pub fn add_grade(&mut self, name: &str, grade: u8) { // Implement here if let Some(student) = self.students.get_mut(name) { student.grades.push(grade) }; } pub fn get_grades(&self, name: &str) -> &[u8] { // Implement here self.students .get(name) .map_or(&[], |student| &student.grades) }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;pub struct Student { // 1. Define the fields pub name: String, pub grades: Vec<u8>,}pub struct StudentGrades { // 2. Define the fields pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } // 3. Implement the methods pub fn add_student(&mut self, name: &str) { // Implement here self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: Vec::new(), }); } pub fn add_grade(&mut self, name: &str, grade: u8) { // Implement here self.students .entry(name.to_string()) .or_insert(Student { name: name.to_string(), grades: Vec::new(), }) .grades .push(grade); } pub fn get_grades(&self, name: &str) -> &[u8] { // Implement here self.students .get(name) .map_or(&[], |student| &student.grades) }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;pub struct Student { // 1. Define the fields name: String, grades: Vec<u8>,}pub struct StudentGrades { // 2. Define the fields pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } // 3. Implement the methods pub fn add_student(&mut self, name: &str) { // Implement here self.students.insert(name.to_string(), Student{name: String::from(name), grades: vec![]}); } pub fn add_grade(&mut self, name: &str, grade: u8) { // Implement here self.students.entry(name.to_string()) .and_modify(|e| e.grades.push(grade)) .or_insert(Student{name: String::from(name), grades: vec![grade]}); } pub fn get_grades(&self, name: &str) -> &[u8] { // Implement here self.students.get(name).unwrap().grades.as_slice() }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;pub struct Student { // 1. Define the fields pub name: String, pub grades: Vec<u8>}pub struct StudentGrades { // 2. Define the fields pub students: HashMap<String, Student>}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } // 3. Implement the methods pub fn add_student(&mut self, name: &str) { if !self.students.contains_key(name) { self.students.insert(name.to_string(), Student { name: name.to_string(), grades: vec![] }); } } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students .get_mut(name) { student.grades.push(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { if let Some(student) = self.students.get(name) { return student.grades.as_ref() } &[] }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;pub struct Student { // 1. Define the fields pub name : String, pub grades:Vec<u8>}pub struct StudentGrades { // 2. Define the fields pub students: HashMap<String, Student>}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } // 3. Implement the methods pub fn add_student(&mut self, name: &str) { // Implement here self.students.entry(name.to_string()).or_insert(Student{name:name.to_string(), grades:Vec::new()}); } pub fn add_grade(&mut self, name: &str, grade: u8) { // Implement here self.students.entry(name.to_string()).and_modify(|student| (*student).grades.push(grade)); } pub fn get_grades(&self, name: &str) -> &[u8] { return self.students.get(name).unwrap().grades.as_slice(); }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;pub struct Student { // 1. Define the fields pub name : String, pub grades:Vec<u8>}pub struct StudentGrades { // 2. Define the fields pub students: HashMap<String, Student>}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } // 3. Implement the methods pub fn add_student(&mut self, name: &str) { // Implement here self.students.entry(name.to_string()).or_insert(Student{name:name.to_string(), grades:vec![]}); } pub fn add_grade(&mut self, name: &str, grade: u8) { // Implement here self.students.entry(name.to_string()).and_modify(|student| (*student).grades.push(grade)); } pub fn get_grades(&self, name: &str) -> &[u8] { return self.students.get(name).unwrap().grades.as_slice(); }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}impl Student { pub fn add_grade(&mut self, grade: u8) { self.grades.push(grade); } pub fn average_grade(&self) -> f64 { let sum : f64= self.grades.iter().map(|&x| x as f64).sum(); sum/(self.grades.len() as f64) }}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.add_grade(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}pub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); let alice = tracker.students.get_mut("Alice").unwrap(); alice.add_grade(95); println!("{:?}", alice.grades); println!("{:?}", alice.average_grade()); println!("{:?}", tracker.get_grades("Bob"));}
use std::collections::HashMap;pub struct Student { pub grades: Vec<u8>,}pub struct StudentGrades { pub students: HashMap<String, Student>}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } // 3. Implement the methods pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student{ grades: Vec::new(), }); } pub fn add_grade(&mut self, name: &str, grade: u8) { self.students.get_mut(name).unwrap().grades.push(grade); } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}pub struct StudentGrades { pub students: HashMap<String, Student>}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } // 3. Implement the methods pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student{ name: name.to_string(), grades: Vec::new(), }); } pub fn add_grade(&mut self, name: &str, grade: u8) { self.students.get_mut(name).unwrap().grades.push(grade); } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;pub struct Student { name: String, grades: Vec<u8>}pub struct StudentGrades { pub students: HashMap<String,Student>}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } // 3. Implement the methods pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: Vec::new() }); } pub fn add_grade(&mut self, name: &str, grade: u8) { self.students.get_mut(name).unwrap().grades.push(grade); } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;#[derive(Default)]pub struct Student { // 1. Define the fields pub name: String, pub grades: Vec<u8>,}pub struct StudentGrades { // 2. Define the fields pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } // 3. Implement the methods pub fn add_student(&mut self, name: &str) { // Implement here self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: Vec::new() }); } pub fn add_grade(&mut self, name: &str, grade: u8) { // Implement here let stud = self.students.get_mut(name).unwrap(); stud.grades.push(grade); } pub fn get_grades(&self, name: &str) -> &[u8] { // Implement here let stud = self.students.get(name).unwrap(); &stud.grades }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}pub struct StudentGrades { pub students: HashMap<String, Student>}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } // 3. Implement the methods pub fn add_student(&mut self, name: &str) { if !self.students.contains_key(name) { let student = Student { name: name.to_string(), grades: Vec::new(), }; self.students.insert(name.to_string(), student); } } pub fn add_grade(&mut self, name: &str, grade: u8) { self.students.get_mut(name).unwrap().grades.push(grade); } pub fn get_grades(&self, name: &str) -> &[u8] { self.students .get(name) .unwrap() .grades .as_slice() }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}pub struct StudentGrades { pub students: HashMap<String, Student>}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.insert( name.to_string(), Student { name: name.to_string(), grades: Vec::new() } ); } pub fn add_grade(&mut self, name: &str, grade: u8) { let student_to_grade = self.students.get_mut(name).unwrap(); let student_grades_to_update = &mut student_to_grade.grades; student_grades_to_update.push(grade); } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;pub struct Student { // name: String, pub grades: Vec<u8> // 1. Define the fields}pub struct StudentGrades { pub students: HashMap<String, Student> // 2. Define the fields}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } // 3. Implement the methods pub fn add_student(&mut self, name: &str) { self.students.insert( name.to_string(), Student { grades: vec![], }, ); // Implement here } pub fn add_grade(&mut self, name: &str, grade: u8) { self.students .entry(name.to_string()) .and_modify(|ell| ell.grades.push(grade)) .or_insert(Student { grades: vec![grade], }); // Implement here } pub fn get_grades(&self, name: &str) -> &[u8] { match self.students.get(name) { Some(student) => &student.grades, None => &[], } // Implement here }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;pub struct Student { pub grades: Vec<u8>}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.insert( name.to_string(), Student { grades: vec![], }, ); } pub fn add_grade(&mut self, name: &str, grade: u8) { self.students .entry(name.to_string()) .and_modify(|ell| ell.grades.push(grade)) .or_insert(Student { grades: vec![grade], }); } pub fn get_grades(&self, name: &str) -> &[u8] { match self.students.get(name) { Some(student) => &student.grades, None => &[], } }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;pub struct Student { pub grades: Vec<u8>}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.insert( name.to_string(), Student { grades: vec![], }, ); } pub fn add_grade(&mut self, name: &str, grade: u8) { self.students .entry(name.to_string()) .and_modify(|ell| ell.grades.push(grade)) .or_insert(Student { grades: vec![grade], }); } pub fn get_grades(&self, name: &str) -> &[u8] { match self.students.get(name) { Some(student) => &student.grades, None => &[], } }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;pub struct Student { pub grades: Vec<u8>}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.insert( name.to_string(), Student { grades: vec![], }, ); } pub fn add_grade(&mut self, name: &str, grade: u8) { self.students .entry(name.to_string()) .and_modify(|ell| ell.grades.push(grade)) .or_insert(Student { grades: vec![grade], }); } pub fn get_grades(&self, name: &str) -> &[u8] { match self.students.get(name) { Some(student) => &student.grades, None => &[], } }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } pub fn add_student(&mut self, name: &str) { self.students.insert( name.to_string(), Student { name: name.to_string(), grades: vec![], }, ); } pub fn add_grade(&mut self, name: &str, grade: u8) { self.students .entry(name.to_string()) .and_modify(|ell| ell.grades.push(grade)) .or_insert(Student { name: name.to_string(), grades: vec![grade], }); } pub fn get_grades(&self, name: &str) -> &[u8] { match self.students.get(name) { Some(student) => &student.grades, None => &[], } }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;pub struct Student { // 1. Define the fields grades: Vec<u8>,}pub struct StudentGrades { // 2. Define the fields pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } // 3. Implement the methods pub fn add_student(&mut self, name: &str) { // Implement here let student = Student { grades: Vec::new() }; self.students.insert(name.to_string(), student); } pub fn add_grade(&mut self, name: &str, grade: u8) { // Implement here let student = self.students.get_mut(name).unwrap(); student.grades.push(grade); } pub fn get_grades(&self, name: &str) -> &[u8] { // Implement here let student = self.students.get(name).unwrap(); student.grades.as_slice() }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } // 3. Implement the methods pub fn add_student(&mut self, name: &str) { let student = Student{name: name.to_string(), grades: Vec::new()}; self.students.insert(name.to_string(), student); return } pub fn add_grade(&mut self, name: &str, grade: u8) { let stud = self.students.get_mut(name).expect("Student not found"); stud.grades.push(grade); return } pub fn get_grades(&self, name: &str) -> &[u8] { let stud = self.students.get(name).expect("Student not found"); &stud.grades }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;pub struct Student { // 1. Define the fields pub name: String, pub grades: Vec<u8>}pub struct StudentGrades { // 2. Define the fields pub students: HashMap< String, Student>}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } // 3. Implement the methods pub fn add_student(&mut self, name: &str) { // Implement here if let Some(_student) = self.students.get(name) { return; } let student = Student { name: name.to_string() , grades: vec![]}; self.students.insert(name.to_string(), student); } pub fn add_grade(&mut self, name: &str, grade: u8) { // Implement here if let Some(student) = self.students.get(name) { let mut grades = student.grades.clone(); grades.push(grade); let student = Student { name: name.to_string() , grades }; self.students.insert(name.to_string(), student); } } pub fn get_grades(&self, name: &str) -> &[u8] { // Implement here if let Some(student) = self.students.get(name) { return &student.grades; } &[] }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;pub struct Student { name: String, grades: Vec<u8>}pub struct StudentGrades { pub students: HashMap<String, Student>}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } // 3. Implement the methods pub fn add_student(&mut self, name: &str) { self.students.insert(name.to_owned(), Student { name: name.to_string(), grades: Vec::new()}); } pub fn add_grade(&mut self, name: &str, grade: u8) { self.students.get_mut(name).unwrap().grades.push(grade); } pub fn get_grades(&self, name: &str) -> &[u8] { self.students.get(name).unwrap().grades.as_slice() }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;#[derive(Debug)]pub struct Student { pub name: String, pub grades: Vec<u8>,}#[derive(Debug)]pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } // 3. Implement the methods pub fn add_student(&mut self, name: &str) { // Implement here if !self.students.contains_key(name){ let new_student =Student{ name: name.to_string(), grades: Vec::new(), }; self.students.insert(name.to_string(), new_student); } } pub fn add_grade(&mut self, name: &str, grade: u8) { // Implement here if let Some(student) = self.students.get_mut(name) { // Fixed student lookup student.grades.push(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { if let Some(student) = self.students.get(name) { &student.grades } else { &[] // Return an empty slice if student doesn't exist (not needed per problem statement, but safe) } }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>}pub struct StudentGrades { pub students: HashMap<String, Student>}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } // 3. Implement the methods pub fn add_student(&mut self, name: &str) { self.students.insert(name.to_string(), Student{ name: name.to_string(), grades: Vec::new()}); } pub fn add_grade(&mut self, name: &str, grade: u8) { self.students.entry(name.to_string()).and_modify(|e| {e.grades.push(grade)}); } pub fn get_grades(&self, name: &str) -> &[u8] { self.students.get(&name.to_string()).unwrap().grades.as_slice() }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;pub struct Student { // 1. Define the fields pub name:String, pub grades: Vec<u8>,}pub struct StudentGrades { // 2. Define the fields pub students:HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } // 3. Implement the methods pub fn add_student(&mut self, name: &str) { // Implement here if !self.students.contains_key(name){ self.students.insert(name.to_string(), Student { name: name.to_string(), grades: Vec::<u8>::new(), } ); } } pub fn add_grade(&mut self, name: &str, grade: u8) { // Implement here if self.students.contains_key(name) { self.students.entry(name.to_string()).and_modify(|v| {v.grades.push(grade);}); } } pub fn get_grades(&self, name: &str) -> &[u8] { // Implement here &self.students.get(name).unwrap().grades }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;pub struct Student { // 1. Define the fields pub name: String, pub grades: Vec<u8>, }pub struct StudentGrades { // 2. Define the fields pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } // 3. Implement the methods pub fn add_student(&mut self, name: &str) { // Implement here self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: Vec::new(), }); } pub fn add_grade(&mut self, name: &str, grade: u8) { // Implement here let student = self.students.get_mut(name).unwrap(); student.grades.push(grade); } pub fn get_grades(&self, name: &str) -> &[u8] { // Implement here let student = self.students.get(name).unwrap(); &student.grades }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } // 3. Implement the methods pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: Vec::new(), }); } pub fn add_grade(&mut self, name: &str, grade: u8) { let student = self.students.get_mut(name).unwrap(); student.grades.push(grade); } pub fn get_grades(&self, name: &str) -> &[u8] { let student = self.students.get(name).unwrap(); &student.grades }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;pub struct Student { // 1. Define the fields pub name: String, pub grades: Vec<u8>,}pub struct StudentGrades { // 2. Define the fields pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } // 3. Implement the methods pub fn add_student(&mut self, name: &str) { // Implement here self.students.entry(name.to_string()) .or_insert( Student { name: name.to_string(), grades: Vec::new(), } ); } pub fn add_grade(&mut self, name: &str, grade: u8) { // Implement here let student = self.students.get_mut(name).unwrap(); student.grades.push(grade); } pub fn get_grades(&self, name: &str) -> &[u8] { // Implement here let student = self.students.get(name).unwrap(); &student.grades }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;pub struct Student { // 1. Define the fields pub name: String, pub grades: Vec<u8>,}pub struct StudentGrades { // 2. Define the fields pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } // 3. Implement the methods pub fn add_student(&mut self, name: &str) { // Implement here self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: vec![], }); } pub fn add_grade(&mut self, name: &str, grade: u8) { // Implement here self.students.get_mut(name).unwrap().grades.push(grade); } pub fn get_grades(&self, name: &str) -> &[u8] { // Implement here &self.students.get(name).unwrap().grades }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } // 3. Implement the methods pub fn add_student(&mut self, name: &str) { self.students.entry(name.to_string()).or_insert(Student { name: name.to_string(), grades: Vec::new(), }); } pub fn add_grade(&mut self, name: &str, grade: u8) { if let Some(student) = self.students.get_mut(name) { student.grades.push(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { self.students .get(name) .map(|student| student.grades.as_slice()) .unwrap_or(&[]) }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;pub struct Student { // 1. Define the fields pub name: String, pub grades: Vec<u8>,}pub struct StudentGrades { // 2. Define the fields pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } // 3. Implement the methods pub fn add_student(&mut self, name: &str) { // Implement here self.students.insert(name.to_string(), Student{name: name.to_string(), grades:Vec::<u8>::new()}); } pub fn add_grade(&mut self, name: &str, grade: u8) { // Implement here self.students.entry(name.to_string()).and_modify(|x| x.grades.push(grade)); } pub fn get_grades(&self, name: &str) -> &[u8] { // Implement here &self.students.get(name).unwrap().grades }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;pub struct Student { // 1. Define the fields name: String, grades: Vec<u8>,}pub struct StudentGrades { // 2. Define the fields pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } // 3. Implement the methods pub fn add_student(&mut self, name: &str) { // Implement here self.students.insert(name.to_string(), Student{ name: name.to_string(), grades:Vec::new(), }); } pub fn add_grade(&mut self, name: &str, grade: u8) { // Implement here if let Some(student) = self.students.get_mut(name) { student.grades.push(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { // Implement here let Some(student) = self.students.get(name) else { return &[]; }; student.grades.as_slice() }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;pub struct Student { // 1. Define the fields name: String, grades: Vec<u8>,}pub struct StudentGrades { // 2. Define the fields pub students: HashMap<String, Student>}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } // 3. Implement the methods pub fn add_student(&mut self, name: &str) { // Implement here self.students.insert(name.to_string(), Student{ name: name.to_string(), grades: Vec::new() }); } pub fn add_grade(&mut self, name: &str, grade: u8) { // Implement here if let Some(students) = self.students.get_mut(name) { students.grades.push(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { // Implement here self.students.get(name) .map(|s| s.grades.as_slice()) .unwrap_or(&[]) }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;pub struct Student { // 1. Define the fields pub name : String, pub grades: Vec<u8>,}pub struct StudentGrades { // 2. Define the fields pub students: HashMap<String,Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } // 3. Implement the methods pub fn add_student(&mut self, name: &str) { // Implement here self.students.entry(name.into()).or_insert(Student{ name : name.into(), grades: Vec::new(), }); } pub fn add_grade(&mut self, name: &str, grade: u8) { // Implement here if let Some(student) = self.students.get_mut(name){ student.grades.push(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { // Implement here let Some(student) = self.students.get(name) else{ return &[]}; student.grades.as_slice() }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;pub struct Student { // 1. Define the fields pub name: String, pub grades: Vec<u8>,}pub struct StudentGrades { // 2. Define the fields pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } // 3. Implement the methods pub fn add_student(&mut self, name: &str) { // Implement here if !self.students.contains_key(name) { self.students.insert(name.to_string(), Student { name: name.to_string(), grades: Vec::new() }); } } pub fn add_grade(&mut self, name: &str, grade: u8) { // Implement here if let Some(student) = self.students.get_mut(name) { student.grades.push(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { // Implement here if let Some(student) = self.students.get(name) { &student.grades } else { &[] } }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;pub struct Student { pub name: String, pub grades: Vec<u8>,}pub struct StudentGrades { pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } // 3. Implement the methods pub fn add_student(&mut self, name: &str) { self.students.insert(name.to_owned(), Student{name: name.to_owned(), grades: vec![]}); } pub fn add_grade(&mut self, name: &str, grade: u8) { self.students.get_mut(name).unwrap().grades.push(grade); } pub fn get_grades(&self, name: &str) -> &[u8] { &self.students.get(name).unwrap().grades[..] }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}
use std::collections::HashMap;pub struct Student { // 1. Define the fields pub name: String, pub grades: Vec<u8>,}pub struct StudentGrades { // 2. Define the fields pub students: HashMap<String, Student>,}impl StudentGrades { pub fn new() -> Self { Self { students: HashMap::new(), } } // 3. Implement the methods pub fn add_student(&mut self, name: &str) { // Implement here self.students.entry(name.to_string()).or_insert( Student{ name: name.to_string(), grades: Vec::new() } ); } pub fn add_grade(&mut self, name: &str, grade: u8) { // Implement here if let Some(student) = self.students.get_mut(name) { student.grades.push(grade); } } pub fn get_grades(&self, name: &str) -> &[u8] { // Implement here &self.students[name].grades }}// Example usagepub fn main() { let mut tracker = StudentGrades::new(); tracker.add_student("Alice"); tracker.add_student("Bob"); tracker.add_grade("Alice", 85); tracker.add_grade("Alice", 90); tracker.add_grade("Bob", 78); println!("{:?}", tracker.get_grades("Alice")); // [85, 90] println!("{:?}", tracker.get_grades("Bob")); // [78]}