use std::env; use std::collections::HashMap; fn calc_mean(numbers: &Vec) -> f32 { let sum: i32 = numbers.iter().sum(); sum as f32 / numbers.len() as f32 } fn calc_median(numbers: &Vec) -> i32 { numbers[numbers.len() / 2] } fn calc_mode(numbers: &Vec) -> i32 { let mut counts: HashMap = HashMap::new(); for each in numbers { let count = counts.entry(*each).or_insert(0); *count += 1; } let mut most: i32 = 0; let mut result: i32 = 0; for (key, val) in counts.iter() { if val > &most { most = *val; result = *key; } } if most <= 1 { 0 } else { result } } fn main() { // grab numbers let mut numbers: Vec = Vec::new(); for arg in env::args().skip(1) { let number: i32 = arg.trim().parse() .expect("error: could not parse arg"); numbers.push(number); } // sort list (mostly for median) numbers.sort_by(|a, b| a.partial_cmp(b).unwrap()); // calculate and print results let mean: f32 = calc_mean(&numbers); println!("mean: {}", mean); let median: i32 = calc_median(&numbers); println!("median: {}", median); let mode: i32 = calc_mode(&numbers); println!("mode: {}", mode); }