【发布时间】:2015-07-18 17:50:00
【问题描述】:
好的,我要做的就是这样。我有一个带有“FuelEntries”数组的“汽车”对象。每个 FuelEntry 都有 mileage、gallonsPumped 属性和“fillUp”的 Bool 值。
我在我的应用程序中成功计算了最新的燃油里程,并使用以下方法显示结果:
- (float)calculateMPG:(Car*)car {
RLMResults *fuelResults1 = [car.fuelEntries objectsWhere:@"fillUp = YES"];
if (fuelResults1.count <= 1) {
return 0.0;
} else {
NSUInteger __block firstEntry = 0;
NSUInteger __block secondEntry = 0;
float __block gallonsTotal = 0.0;
RLMResults *fuelResults = [car.fuelEntries sortedResultsUsingProperty:@"date" ascending:NO];
NSMutableArray *results = [NSMutableArray new];
for (FuelEntry *entry in fuelResults) {
[results addObject:entry];
}
[results enumerateObjectsUsingBlock:^(FuelEntry *obj, NSUInteger idx, BOOL *stop) {
if (obj.fillUp == YES && firstEntry == 0) {
firstEntry = obj.mileage;
gallonsTotal += obj.gallons;
} else if (obj.fillUp == NO && firstEntry == 0) {
idx++;
} else if (obj.fillUp == YES && firstEntry != 0) {
secondEntry = obj.mileage;
*stop = YES;
} else {
gallonsTotal += obj.gallons;
}
}];
return (firstEntry - secondEntry) / gallonsTotal;
}
}
但是,我被困在如何遍历整个数组并计算 所有 可能的 MPG 读数,以便我可以随着时间的推移创建报告。
我正在考虑创建一个名为 MPGEntry 的 RLMObject,但如果我可以在需要时计算它,我认为它会更简单。
这是我的“汽车”类标题:
#import <Realm/Realm.h>
#import "OilChange.h"
#import "FuelEntry.h"
#import "ServiceEntry.h"
#import "MonthlyMilesEntry.h"
#import "PhotoObject.h"
#import "MPGEntry.h"
RLM_ARRAY_TYPE(OilChange)
RLM_ARRAY_TYPE(FuelEntry)
RLM_ARRAY_TYPE(MonthlyMilesEntry)
RLM_ARRAY_TYPE(ServiceEntry)
@interface Car : RLMObject
@property NSString *uuid;
@property NSString *name;
@property NSString *make;
@property NSString *VIN;
@property NSInteger year;
//@property BOOL activeCar;
@property NSInteger currentMileage;
@property NSString *driverID;
@property NSInteger oilChangeMiles;
@property NSInteger nextOilChange;
@property RLMArray<PhotoObject> *carPhoto;
@property RLMArray<OilChange> *oilChanges;
@property RLMArray<FuelEntry> *fuelEntries;
@property RLMArray<ServiceEntry> *serviceEntries;
@property RLMArray<MonthlyMilesEntry> *monthlyMilesEntries;
@property RLMArray<MPGEntry> *mpgEntries;
+ (NSDictionary *)defaultPropertyValues;
+ (NSString *)primaryKey;
@end
这是我当前的“FuelEntry”标题:
#import <Realm/Realm.h>
#import "PhotoObject.h"
@interface FuelEntry : RLMObject
@property NSDate *date;
@property NSInteger mileage;
@property double price;
@property double gallons;
@property BOOL fillUp;
@property RLMArray<PhotoObject> *receipts;
+ (NSDictionary *)defaultPropertyValues;
@end
非常感谢任何帮助。
【问题讨论】:
标签: objective-c algorithm realm