0

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

4

1 回答 1

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;
    }
 }];

枚举数组的其他选项可以在 Collections Programming Topics 文档的Enumeration下找到。

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

于 2012-04-25T17:23:45.280 回答