נבו*_*שלו 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)
的优势NSNumberFormatter比stringWithFormat是你有过的数量,例如,它可以观察到本地化的字符串表示更大的控制权,采用千分之一分离器等