tableview数据的最小/最大方法

时间:2012-04-25 17:09:03

标签: objective-c xcode4.3

在我的tableview上,在搜索之后填充它之前,我想在tableview顶部的文本字段中添加当前搜索的最小距离和最大距离。我似乎无法找到确定这些参数的方法,我的搜索结果将从2到50不等。我不想这样做只是比较一个循环中当前位置的每个项目的距离的hackcish方式。任何人都可以指出一个干净的方法来确定可变数组中元素的最小值/最大值吗?

1 个答案:

答案 0 :(得分:0)

如果你需要数组中每个元素的某个值,那么你将不得不以某种方式迭代数组。循环没有问题。不过,除了显式循环之外,还有其他方法可以通过数组。也许-[NSArray enumerateObjectsUsingBlock:]会让你开心:

__block CGFloat minDistance = INF;
__block CGFloat maxDistance = -INF;
[locationsArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop){
    CGFloat dist = // calculate distance from obj to current location
    if( dist < minDistance ){
        minDistance = dist;
    }
    if( dist > maxDistance ){
        maxDistance = dist;
    }
 }];

枚举数组的其他选项可以在Enumeration下的“集合编程主题”文档中找到。

您还应该查看Key-Value Collection Operators[locationsArray valueForKey:@"@max.distance"]将提取数组中任何成员所持有的最大distance。这可能看起来正是您正在寻找的,但有两件事需要注意。首先,对象必须已经具有 distance属性 - 作为此过程的一部分,您无法进行任何计算。其次,属性必须是一个对象(在这种情况下,可能是NSNumber)而不是像CGFloat这样的原语,因为valueForKey:将向结果发送compare:每个财产访问。