2012-04-25 58 views
0

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

回答

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:到每个属性访问的结果。

+0

我昨天晚上读到了kvc操作员,似乎是要走的路,尽管我无法在实施过程中获得快速启动。谢谢 – Crask422 2012-04-25 17:59:27

+0

在某些情况下,它们非常方便。例如,当您使用阵列控制器时,您也可以在IB内部使用它们。很高兴我能帮上忙。 – 2012-04-25 18:01:36