2014-04-08 33 views
0

我在Objective-C中有一個數組,用於存儲基本里程數據。所以每次添加到陣列時,我都會添加4個元素(英里,升,成本,MPG)。如果我保存10個參賽作品,我最終將獲得10個表示費用的元素。我如何遍歷一個特定的元素,給它們分配一個索引,然後將它們全部加起來然後除以總索引數? 我發現很多信息循環遍歷基本數組,只是包含數字和執行平均值,但我似乎無法讓它縮小到特定元素?我應該只用我需要的數據創建一個新數組,然後平均這些數據,還是可以直接在主數組上工作,這會更容易?遍歷數組的元素,然後平均數

這將只是一個平面數組工作,如果它用只是我的成本數據填充,它會遍歷並打印到控制檯

for (NSString* string in arrayOfStrings){ 
NSLog(@"%@", string); 
} 

那麼我將如何深入到這個數組說和實現同樣的事情尋找我的具體成本要素。我想我可以從那裏工作?

arrayOfStrings.cost 

回答

1

如果您創建一個具有成本屬性的類:

@interface MYCostObject : NSObject 

@property double cost; 

@end 

你可能會認爲你可以在MYCostObjects集合循環:

MYCostObject* foo = [[MYCostObject alloc] init]; 
MYCostObject* bar = [foo copy]; 
foo.cost = 10.0; 
bar.cost = 2.0; 
NSArray* myArray = @[foo, bar]; 

double sum = 0.0; 
for (MYCostObject* costObj in myArray) 
{ 
    sum += costObj.cost; 
} 
double avg = sum/myArray.count; 

但是,您也可以跳過循環中的枚舉並使用collection operator

NSNumber* avg = [myArray valueForKeyPath:@"@avg.cost"]; 
+0

優秀,這確實幫助很大。我最終使用集合運算符來解決我原來的問題。感謝您的幫助和迅速響應。 – jiffo

0

,因爲我不清楚你讓一個數組的你應該張貼一些代碼。數組中的元素只有一個索引,而不是一個名稱。你可能需要一個NSDictionaries數組。然後這樣做:

int sum = 0; 
int count = 0; 
for(NSDictionary *entry in myArray) { 
    NSNumber cost = [entry valueForKey:@"cost"]; 
    if(cost) { 
     sum += [cost intValue]; 
     count++; 
    } 
} 
int costAvg = sum/count; 
+0

我想你已經開悟了我。正如你所想象的那樣,我非常關注這個陣列,我已經失去了我想要做的事情。我會嘗試你的迴應,因爲它是有道理的。看起來像我之後,你已經設法從數組中填充字典,然後搜索成本鍵循環,然後除以循環的數量。無論如何,在我的困惑中。如果沒有準備好代碼的副本,我會盡力回覆!感謝您及時的回覆。 – jiffo

+0

不客氣。你也可以創建一個新的類「MileageRecord」(或其他)作爲你自己的NSObject的子類,並創建一個填充了MileageRecords而不是NSDictionaries的NSArray ......取決於你想要如何操縱這些條目。如果他們有很多邏輯,一個班級是有道理的。 – RobP