MST

星途 面试题库

面试题:Objective-C的Health App数据集成之复杂数据处理

在一个Objective-C编写的Health App里,已经成功获取到用户一段时间内的心率数据数组,现在要计算这段时间内心率的平均值、最大值和最小值,并且要处理数据可能为空的情况,使用Objective-C语言,如何高效地实现这个功能?请给出具体代码示例。
46.3万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试
#import <Foundation/Foundation.h>

@interface HeartRateCalculator : NSObject

+ (NSDictionary *)calculateHeartRateStatistics:(NSArray<NSNumber *> *)heartRateData;

@end

@implementation HeartRateCalculator

+ (NSDictionary *)calculateHeartRateStatistics:(NSArray<NSNumber *> *)heartRateData {
    if (heartRateData.count == 0) {
        return @{
            @"average": @0,
            @"max": @0,
            @"min": @0
        };
    }
    
    NSNumber *max = heartRateData[0];
    NSNumber *min = heartRateData[0];
    double sum = 0;
    
    for (NSNumber *number in heartRateData) {
        if ([number doubleValue] > [max doubleValue]) {
            max = number;
        }
        if ([number doubleValue] < [min doubleValue]) {
            min = number;
        }
        sum += [number doubleValue];
    }
    
    double average = sum / heartRateData.count;
    
    return @{
        @"average": @(average),
        @"max": max,
        @"min": min
    };
}

@end

你可以这样调用这个方法:

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSArray<NSNumber *> *heartRateData = @[@100, @120, @90, @110];
        NSDictionary *statistics = [HeartRateCalculator calculateHeartRateStatistics:heartRateData];
        NSLog(@"Average: %@, Max: %@, Min: %@", statistics[@"average"], statistics[@"max"], statistics[@"min"]);
    }
    return 0;
}