File tree Expand file tree Collapse file tree 1 file changed +20
-41
lines changed
Expand file tree Collapse file tree 1 file changed +20
-41
lines changed Original file line number Diff line number Diff line change @@ -24,50 +24,29 @@ pub trait Median<T> {
2424 fn median ( & mut self ) -> T ;
2525}
2626
27- impl Median < i64 > for Vec < i64 > {
28- fn median ( & mut self ) -> i64 {
29- self . sort ( ) ;
30- let len = self . len ( ) ;
31- if len == 0 {
32- 0
33- } else if len % 2 == 1 {
34- self [ len / 2 ]
35- } else {
36- let mid = len / 2 ;
37- ( self [ mid - 1 ] + self [ mid] ) / 2
38- }
39- }
40- }
41-
42- impl Median < u64 > for Vec < u64 > {
43- fn median ( & mut self ) -> u64 {
44- self . sort ( ) ;
45- let len = self . len ( ) ;
46- if len == 0 {
47- 0
48- } else if len % 2 == 1 {
49- self [ len / 2 ]
50- } else {
51- let mid = len / 2 ;
52- ( self [ mid - 1 ] + self [ mid] ) / 2
27+ macro_rules! impl_median_for {
28+ ( $t: ident) => {
29+ impl Median <$t> for [ $t] {
30+ fn median( & mut self ) -> $t {
31+ self . sort( ) ;
32+ let len = self . len( ) ;
33+ if len == 0 {
34+ 0
35+ } else if len % 2 == 1 {
36+ self [ len / 2 ]
37+ } else {
38+ let mid = len / 2 ;
39+ ( self [ mid - 1 ] + self [ mid] ) / 2
40+ }
41+ }
5342 }
54- }
43+ } ;
5544}
5645
57- impl Median < u32 > for Vec < u32 > {
58- fn median ( & mut self ) -> u32 {
59- self . sort ( ) ;
60- let len = self . len ( ) ;
61- if len == 0 {
62- 0
63- } else if len % 2 == 1 {
64- self [ len / 2 ]
65- } else {
66- let mid = len / 2 ;
67- ( self [ mid - 1 ] + self [ mid] ) / 2
68- }
69- }
70- }
46+ impl_median_for ! ( u32 ) ;
47+ impl_median_for ! ( u64 ) ;
48+ impl_median_for ! ( i32 ) ;
49+ impl_median_for ! ( i64 ) ;
7150
7251pub trait Netgroup {
7352 fn netgroup ( & self ) -> String ;
You can’t perform that action at this time.
0 commit comments