From fdde4fcd039210d7378c3f31ec9372396b1464a9 Mon Sep 17 00:00:00 2001 From: Federico Igne Date: Fri, 1 Jan 2021 19:03:31 +0000 Subject: [rust] Grade School --- rust/grade-school/src/lib.rs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 rust/grade-school/src/lib.rs (limited to 'rust/grade-school/src/lib.rs') diff --git a/rust/grade-school/src/lib.rs b/rust/grade-school/src/lib.rs new file mode 100644 index 0000000..266fb1f --- /dev/null +++ b/rust/grade-school/src/lib.rs @@ -0,0 +1,22 @@ +use std::collections::{BTreeMap, BTreeSet}; + +#[derive(Default)] +pub struct School(BTreeMap>); + +impl School { + pub fn new() -> School { + Self::default() + } + + pub fn add(&mut self, grade: u32, student: &str) { + self.0.entry(grade).or_default().insert(student.to_string()); + } + + pub fn grades(&self) -> Vec { + self.0.keys().cloned().collect() + } + + pub fn grade(&self, grade: u32) -> Option> { + self.0.get(&grade).map(|vs| vs.iter().cloned().collect()) + } +} -- cgit v1.2.3