Skip to content

Instantly share code, notes, and snippets.

@justinmstuart
Last active June 14, 2019 03:36
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save justinmstuart/6687145 to your computer and use it in GitHub Desktop.
Save justinmstuart/6687145 to your computer and use it in GitHub Desktop.
Calculate Summary Statistics for Array: Sum, Mean, Min, Max, Standard Deviation
#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
@Motti-Shneor
Copy link

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment