// // NSArrayAdditions.m // Exercise 20 // // Created by Jonathan Saggau on 9/19/06. // Copyright 2006 Jonathan Saggau. All rights reserved. // #import "NSArrayAdditions.h" @implementation NSArray (NSArrayAdditions) - (NSArray *)normalizedArrayToMin:(float) min toMax:(float) max; { int len = [self count]; float minValue, maxValue, range, outRange; if (len <= 0) return [NSArray array]; NSArray *sortedArray; sortedArray = [self sortedArrayUsingSelector:@selector(compare:)]; minValue = [[sortedArray objectAtIndex:0] floatValue]; maxValue = [[sortedArray lastObject] floatValue]; range = maxValue - minValue; outRange = max - min; NSMutableArray *normalArray = [[NSMutableArray alloc] initWithCapacity:len]; for (int i = 0; i < len; i++) { float eachNewValue = [[self objectAtIndex:i] floatValue]; //normalize zero .. range eachNewValue -= minValue; //normalize zero .. one eachNewValue /= range; //normalize zero .. outRange eachNewValue *= outRange; //shift whole mess to make lowest value correspond to min eachNewValue += min; [normalArray addObject:[NSNumber numberWithFloat:eachNewValue]]; } NSArray *outArray = [NSArray arrayWithArray:normalArray]; [normalArray release]; return outArray; } - (id)min { NSArray *sortedArray; sortedArray = [self sortedArrayUsingSelector:@selector(compare:)]; return [sortedArray objectAtIndex:0]; } - (id)max { NSArray *sortedArray; sortedArray = [self sortedArrayUsingSelector:@selector(compare:)]; return [sortedArray lastObject]; } @end