计算数组中的平均值

נבו*_*שלו 0 objective-c nsarray ios

我需要在我的应用程序中添加一些计算数字数组平均值的内容.

如果我有3个数字:10,20和30,我如何获取数组中的所有数字,将它们加在一起(60)然后除以总数并在标签的某处显示最终数字?

Rob*_*Rob 18

除了katzenhut建议手动计算平均值之外,您还可以使用KVC集合运算符,例如:

NSArray *array = @[@10, @25, @30];

NSNumber *average = [array valueForKeyPath:@"@avg.self"];
Run Code Online (Sandbox Code Playgroud)

或者,如果处理对象,例如具有此接口的"Product"模型对象:

@interface Product : NSObject

@property (nonatomic, copy) NSString *name;
@property (nonatomic) double price;

- (id)initWithName:(NSString *)name price:(double)price; // the corresponding implementation should be obvious, so I'll not include it in this code snippet

@end
Run Code Online (Sandbox Code Playgroud)

然后你可以这样做:

NSMutableArray *products = [NSMutableArray array];
[products addObject:[[Product alloc] initWithName:@"item A" price:1010.0]];
[products addObject:[[Product alloc] initWithName:@"item B" price:1025.0]];
[products addObject:[[Product alloc] initWithName:@"item C" price:1030.0]];

NSNumber *average = [products valueForKeyPath:@"@avg.price"];
Run Code Online (Sandbox Code Playgroud)

如果您想获取结果并使用结果填充标签,您可能会执行以下操作:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.numberStyle = NSNumberFormatterDecimalStyle;
formatter.maximumFractionDigits = 2;                   // two decimal places?

self.averageLabel.text = [formatter stringFromNumber:average];
Run Code Online (Sandbox Code Playgroud)

的优势NSNumberFormatterstringWithFormat是你有过的数量,例如,它可以观察到本地化的字符串表示更大的控制权,采用千分之一分离器等