2011-02-09 10 views
1

私のアプリケーションでは、NSDictionaryのオブジェクトを保持するNSArrayを持っています。 各辞書には、 "YES"または "NO"(ブール値)を格納するNSNumber型の値を保持する1つの "Primary"があります。配列内の辞書オブジェクトだけが値 "YES"を持つことができます。 ループを使用しない「プライマリ」キーがYESの辞書オブジェクトを取得するにはどうすればよいですか?iPhone - 辞書の配列を繰り返してオブジェクトを取得する

答えて

1

NSArrayで便利なメソッドを呼び出してオブジェクトを見つけることはできますが、そのようなメソッドではループを内部的に使用してオブジェクトを見つけることに注意してください。

NSUInteger indexOfPrimary = [array indexOfObjectPassingTest:^(id obj, NSUInteger idx, BOOL *stop) { 
    return [[obj objectForKey:@"Primary"] boolValue]; 
}]; 
NSDictionary *primary = nil; 
if (indexOfPrimary != NSNotFound) { 
    primary = [array objectAtIndex:indexOfPrimary]; 
} 

もう1つのオプションは-[NSArray filteredArrayUsingPredicate:]です。

+0

を使用すると、あなたは私を説明できますあなたが書いたコードについて少しは? (私はiPhoneのコーディングに新しいんだよ) – Satyam

+0

正確にあなたが何をしているのか分からないのであれば教えてください。 –

+0

私はiPhoneの開発者です。しかし、私は "(^)(id obj、NSUInteger idx、BOOL * stop)"のようなコードに遭遇したことはありません。私はこの部分を理解していませんでした。 – Satyam

0

「ループを使用しない」とはどういう意味ですか?意味はforループを書いていないか、あるいはあなたが使っているルーチンがループを使わないという意味ですか? 「線形時間」ではなく「一定時間」に答えを出すには、レコードへのポインタを保持するだけです。あなたは配列に要素の挿入/削除を所有していない場合は、いや、そこ線形時間ルックアップ以外に方法はないのいずれかのループを自分でやって、またはNSArrayのの

- (NSIndexSet *)indexesOfObjectsPassingTest:(BOOL (^)(id obj, NSUInteger idx, BOOL *stop))predicate 
関連する問題