Iphone 使用NSArray获取对象的最小值和最大值

Iphone 使用NSArray获取对象的最小值和最大值,iphone,ios4,nsarray,ios5,Iphone,Ios4,Nsarray,Ios5,我有一堆双重物体。。。。我现在有一个for循环来遍历NSArray并平均它们。我正在寻找一种方法来确定NSArray中的最小值和最大值,但不知道从哪里开始。。。下面是当前代码我必须得到的平均值 NSArray *TheArray = [[NSArray alloc] initWithArray:self.fetchedResultsController.fetchedObjects]; int TotalVisitors = [TheArray count]; double av

我有一堆双重物体。。。。我现在有一个for循环来遍历NSArray并平均它们。我正在寻找一种方法来确定NSArray中的最小值和最大值,但不知道从哪里开始。。。下面是当前代码我必须得到的平均值

NSArray *TheArray = [[NSArray alloc] initWithArray:self.fetchedResultsController.fetchedObjects];
    int TotalVisitors = [TheArray count];
    double aveRatingSacore = 0;

for (int i = 0; i < TotalVisitors; i++)
        {
            Visitor *object = [TheArray objectAtIndex:i];
            double two = [object.rating doubleValue];
            aveRatingSacore = aveRatingSacore + two;
        }

        aveRatingSacore = aveRatingSacore/TotalVisitors;

任何帮助、建议或代码都将不胜感激。

设置两个双精度,一个用于最小值,一个用于最大值。然后在每次迭代中,将每个设置为现有最小值/最大值和迭代中当前对象的最小值/最大值

NSArray *TheArray = [[NSArray alloc] initWithArray:self.fetchedResultsController.fetchedObjects];
int TotalVisitors = [TheArray count];
double aveRatingSacore = 0;
double minScore = 0;
double maxScore = 0;

for (int i = 0; i < TotalVisitors; i++)
        { 
            Visitor *object = [TheArray objectAtIndex:i];
            double two = [object.rating doubleValue];
            aveRatingSacore = aveRatingSacore + two;
            if (i == 0) {
                minScore = two;
                maxScore = two;
                continue;
            }
            if (two < minScore) {
                 minScore = two;
            }
            if (two > maxScore) {
                 maxScore = two;
            }
        }

aveRatingSacore = aveRatingSacore/TotalVisitors;
double theMin;
double theMax;
BOOL firstTime = YES;
for(Visitor *object in TheArray) {
  if(firstTime) {
    theMin = theMax = [object.rating doubleValue];
    firstTime = NO;
    coninue;
  }
  theMin = fmin(theMin, [object.rating doubleValue]);
  theMax = fmax(theMax, [object.rating doubleValue]);
}
第一时间位只是为了避免涉及零的误报。

这是怎么回事

NSArray *fetchedObjects = self.fetchedResultsController.fetchedObjects;
double avg = [[fetchedObjects valueForKeyPath: @"@avg.price"] doubleValue];
double min = [[fetchedObjects valueForKeyPath: @"@min.price"] doubleValue];
double max = [[fetchedObjects valueForKeyPath: @"@max.price"] doubleValue];

一些关于风格的友好注释,性质良好:1。第一行创建了一个不必要的数组。您可以简单地将数组设置为返回获取的对象。2.循环中的最后一行可以使用一元赋值运算符:aveRatingScore+=two;3.查看Objective-C快速枚举。有了所有这些,您的整个循环可以是一行:aveRatingScore+=[object.rating doubleValue]您的代码导致崩溃valueForKey:,我已将其更新为valueForKeyPath。