2012-04-25 44 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