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