mirror of https://github.com/KaiserY/trpl-zh-cn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
34 lines
721 B
34 lines
721 B
pub struct AveragedCollection {
|
|
list: Vec<i32>,
|
|
average: f64,
|
|
}
|
|
|
|
// ANCHOR: here
|
|
impl AveragedCollection {
|
|
pub fn add(&mut self, value: i32) {
|
|
self.list.push(value);
|
|
self.update_average();
|
|
}
|
|
|
|
pub fn remove(&mut self) -> Option<i32> {
|
|
let result = self.list.pop();
|
|
match result {
|
|
Some(value) => {
|
|
self.update_average();
|
|
Some(value)
|
|
}
|
|
None => None,
|
|
}
|
|
}
|
|
|
|
pub fn average(&self) -> f64 {
|
|
self.average
|
|
}
|
|
|
|
fn update_average(&mut self) {
|
|
let total: i32 = self.list.iter().sum();
|
|
self.average = total as f64 / self.list.len() as f64;
|
|
}
|
|
}
|
|
// ANCHOR_END: here
|