0

テーブルビューで、検索後にデータを入力する前に、テーブルビューの上部にあるテキストフィールドに現在の検索の最小距離と最大距離を追加したいと思います。これらのパラメータを決定する方法を見つけることができないようで、検索結果は2から50まで変化します。ループ内の現在の場所から各アイテムまでの距離を比較するだけのハックな方法はしたくありません。可変配列内の要素の最小/最大を決定するためのクリーンな方法を誰かに教えてもらえますか?

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

配列を列挙するための他のオプションは、CollectionsProgrammingTopicsドキュメントのEnumerationにあります。

Key-Valueコレクション演算子も確認する必要があります。配列のメンバーのいずれかが保持する[locationsArray valueForKey:@"@max.distance"]最大値を引き出します。distanceこれはまさにあなたが探しているもののように見えるかもしれませんが、注意すべき2つのことがあります。まず、オブジェクトにはすでにそのdistanceプロパティが必要です。この手順の一部として計算を行うことはできません。次に、プロパティは、各プロパティアクセスの結果に送信されるため、NSNumberのようなプリミティブではなく、オブジェクト(この場合はおそらく)である必要があります。CGFloatvalueForKey:compare:

于 2012-04-25T17:23:45.280 に答える