我需要在我的應用程序中添加一些內容來計算數字數組的平均值。計算數組中的平均值
如果我有3個數字:10,20和30,我如何獲取數組中的所有數字,將它們加在一起(60),然後除以總數,並將最終數字作爲標籤呈現?
我需要在我的應用程序中添加一些內容來計算數字數組的平均值。計算數組中的平均值
如果我有3個數字:10,20和30,我如何獲取數組中的所有數字,將它們加在一起(60),然後除以總數,並將最終數字作爲標籤呈現?
除了手動計算平均katzenhut的建議,您可以使用KVC收集運營商也是如此,如:
NSArray *array = @[@10, @25, @30];
NSNumber *average = [array valueForKeyPath:@"@avg.self"];
或者,如果有對象處理,例如「產品」模型對象這個接口:
@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
那麼你可以做:
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"];
如果你想利用的結果,並使用該結果的標籤,你可以這樣做:
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.numberStyle = NSNumberFormatterDecimalStyle;
formatter.maximumFractionDigits = 2; // two decimal places?
self.averageLabel.text = [formatter stringFromNumber:average];
的NSNumberFormatter
超過stringWithFormat
的好處是,你有過的字符串表示更大的控制權數字,例如它可以觀察本地化,使用千分之一分隔符等。
@skram - 您編輯了這個答案,用'@(42)'替換'@ 42',將後者描述爲「正確的語法」。括號是不必要的,並且對此答案不加任何附加。請參閱http://clang.llvm.org/docs/ObjectiveCLiterals.html。 – Rob
you shuold有一個包含單元格值的數組,每當編輯單元格時都應該更新該數組。因此,將這些值加起來以備後用(例如,在名爲total
的浮點型中)。
float total;
total = 0;
for(NSNumber *value in myArray){
total+=[value floatValue];
}
按總數除數,就完成了。像float average = total/myArray.count
您應該有一個適當的數據模型。例如,如果您有30個單元格,則不需要在tableview中顯示所有30個單元格。這樣做會浪費資源,爲什麼我們總是在tableview委託中實現dequereuseable方法。
話雖如此,做這樣的事情
#import <UIKit/UIKit.h>
@interface ViewController : UITableViewController
@end
實現如下
#import "ViewController.h"
@interface ViewController()
{
NSArray *numbersList;
}
-(float) calculateAvg;
@end
@implementation ViewController
- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
numbersList = [[NSArray alloc]initWithObjects:@"10",@"23",@"34",@"43",@"57",@"64",@"77",@"88",@"95",nil];
[[self tableView] setDelegate:self];
[[self tableView] setDataSource:self];
}
的#pragma馬克 - 表視圖的數據源
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section. Plus one to hold average
return [numbersList count] + 1;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
if(cell == nil)
{
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
}
if([indexPath row] < [numbersList count])
{
[[cell textLabel] setText:[numbersList objectAtIndex:[indexPath row]]];
}
else
{
float avg = [self calculateAvg];
[[cell textLabel] setText:[NSString stringWithFormat:@"%f",avg]];
}
return cell;
}
-(float) calculateAvg
{
float avg = 0;
for(int idx=0;idx<[numbersList count];idx++)
{
int tempValue = [[numbersList objectAtIndex:idx] intValue];
avg = avg + tempValue;
}
return (avg/[numbersList count]);
}
我真的不知道該怎麼要做到這一點...但最新數組從可變數組的問題? –
使用可變數組中的數字沒有任何問題。實際上,**是** @Rob所指的支持你的收藏視圖的模型的一種形式。話雖如此,你應該按照他的要求描述存儲在數組中的數據。 (他們是NSNumber的嗎?) – lnafziger