Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use num_traits::{NumAssign, NumCast, ToPrimitive};
- use std::ops::*;
- trait Averageable: Iterator {
- fn mean<T>(self) -> T
- where
- Self: Sized,
- Self::Item: NumAssign + ToPrimitive,
- T: NumCast + Div<Output = T>,
- {
- let mut iter = self.enumerate();
- let mut len;
- let mut sum;
- if let Some((i, n)) = iter.next() {
- sum = n;
- len = i;
- } else {
- panic!("Empty iterator!");
- }
- for (i, n) in iter {
- sum += n;
- len = i;
- }
- len += 1;
- let len: T = NumCast::from(len).unwrap();
- let sum: T = NumCast::from(sum).unwrap();
- sum / len
- }
- }
- impl<T> Averageable for T where T: Iterator {}
- fn main() {
- let v: Vec<i32> = vec![10, 10, 20, 20];
- let mean: i32 = v.into_iter().mean();
- println!("{}", mean);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement