1*bf47c682SAndroid Build Coastguard Worker/* 2*bf47c682SAndroid Build Coastguard Worker * Copyright (C) 2016 The Android Open Source Project 3*bf47c682SAndroid Build Coastguard Worker * 4*bf47c682SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*bf47c682SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*bf47c682SAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*bf47c682SAndroid Build Coastguard Worker * 8*bf47c682SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*bf47c682SAndroid Build Coastguard Worker * 10*bf47c682SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*bf47c682SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*bf47c682SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*bf47c682SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*bf47c682SAndroid Build Coastguard Worker * limitations under the License. 15*bf47c682SAndroid Build Coastguard Worker */ 16*bf47c682SAndroid Build Coastguard Worker 17*bf47c682SAndroid Build Coastguard Worker#import "NSArray+Extensions.h" 18*bf47c682SAndroid Build Coastguard Worker 19*bf47c682SAndroid Build Coastguard Worker@implementation NSArray (WALTExtensions) 20*bf47c682SAndroid Build Coastguard Worker- (NSNumber *)medianValue { 21*bf47c682SAndroid Build Coastguard Worker NSArray<NSNumber *> *sorted = [self sortedArrayUsingSelector:@selector(compare:)]; 22*bf47c682SAndroid Build Coastguard Worker const NSUInteger count = sorted.count; 23*bf47c682SAndroid Build Coastguard Worker if (count == 0) { 24*bf47c682SAndroid Build Coastguard Worker return nil; 25*bf47c682SAndroid Build Coastguard Worker } 26*bf47c682SAndroid Build Coastguard Worker 27*bf47c682SAndroid Build Coastguard Worker if (count % 2) { 28*bf47c682SAndroid Build Coastguard Worker return [sorted objectAtIndex:count / 2]; 29*bf47c682SAndroid Build Coastguard Worker } else { 30*bf47c682SAndroid Build Coastguard Worker return [NSNumber numberWithDouble:0.5 * ([sorted objectAtIndex:count / 2].doubleValue + 31*bf47c682SAndroid Build Coastguard Worker [sorted objectAtIndex:count / 2 - 1].doubleValue)]; 32*bf47c682SAndroid Build Coastguard Worker } 33*bf47c682SAndroid Build Coastguard Worker} 34*bf47c682SAndroid Build Coastguard Worker@end 35