Last active
June 14, 2019 03:36
-
-
Save justinmstuart/6687145 to your computer and use it in GitHub Desktop.
Calculate Summary Statistics for Array: Sum, Mean, Min, Max, Standard Deviation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#import "NSArray+Statistics.h" | |
@implementation NSArray (Statistics) | |
- (NSNumber *)sum { | |
NSNumber *sum = [self valueForKeyPath:@"@sum.self"]; | |
return sum; | |
} | |
- (NSNumber *)mean { | |
NSNumber *mean = [self valueForKeyPath:@"@avg.self"]; | |
return mean; | |
} | |
- (NSNumber *)min { | |
NSNumber *min = [self valueForKeyPath:@"@min.self"]; | |
return min; | |
} | |
- (NSNumber *)max { | |
NSNumber *max = [self valueForKeyPath:@"@max.self"]; | |
return max; | |
} | |
- (NSNumber *)median { | |
NSArray *sortedArray = [self sortedArrayUsingSelector:@selector(compare:)]; | |
NSNumber *median; | |
if (sortedArray.count != 1) { | |
if (sortedArray.count % 2 == 0) { | |
median = @(([[sortedArray objectAtIndex:sortedArray.count / 2] integerValue]) + ([[sortedArray objectAtIndex:sortedArray.count / 2 + 1] integerValue]) / 2); | |
} | |
else { | |
median = @([[sortedArray objectAtIndex:sortedArray.count / 2] integerValue]); | |
} | |
} | |
else { | |
median = [sortedArray objectAtIndex:1]; | |
} | |
return median; | |
} | |
- (NSNumber *)standardDeviation { | |
double sumOfDifferencesFromMean = 0; | |
for (NSNumber *score in self) { | |
sumOfDifferencesFromMean += pow(([score doubleValue] - [[self mean] doubleValue]), 2); | |
} | |
NSNumber *standardDeviation = @(sqrt(sumOfDifferencesFromMean / self.count)); | |
return standardDeviation; | |
} | |
@end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I think there is a way to define and access your own custom methods (median, standardDeviation) via same cool KVC aggregation method. I'll try to remember how, and will add here.