1

私はObjective-Cに非常に慣れておらず、NSDictionaryメソッドに出くわしました allKeysForObject:。とても便利なようです。ただし、いくつかのNSArray(すべて長さ2)があり、NSStringsによってキー設定されているNSDictionaryがあります。基本的に、キーはアイテムであり、配列は2つのプロパティを定義します。特定のプロパティを持つすべてのアイテム名を取得したい場合、これはのようなもので実行できますかallKeysForObject、または辞書をループして可変配列を拡張する必要があります(非効率のようです)。

コードスニペットを含めますが、この質問は概念的なものであるため、コードでは何も明確になりません。ああ、なんてこった。簡略化したコードは次のとおりです。

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:[NSArray arrayWithObjects:[NSNumber numberWithInt:1],[NSNumber numberWithInt:2],nil],@"Car",[NSArray arrayWithObjects:[NSNumber numberWithInt:2],[NSNumber numberWithInt:3],nil],@"Boat",nil];
NSLog(@"%@",[dict allKeysForObject:???]); // this is the line I am not at all sure about.

編集:これまでの回答ありがとうございます。しかし、私は自分の質問についてはっきりしていませんでした。もっと一般的なことをする方法を探しています。たとえば、特定のオブジェクトのすべてのキーを取得したくはありません[1,2]が、辞書でNSNumber 1を含むすべての配列を調べて、それらのキーを返したいと思います。したがって、を追加した場合は、どういうわけかNSNumber 1をクエリして、とを取得し@"Plane",[NSArray arrayWithObjects:[NSNumber numberWithInt:1],[NSNumber numberWithInt:3],nil]たいと思います。私は、これがこの方法が行うように設計されたものではないことを感じています。@"Car"@"Plane"

4

2 に答える 2

5

あなたが探している-keysOfEntriesPassingTest:...

NSArray * selectedKeys = [dict keysOfEntriesPassingTest:^(id key, id obj, BOOL *stop)
                          {
                              return [obj containsObject:[NSNumber numberWithInt:2]];
                          }];
于 2012-08-09T18:26:56.117 に答える
-2

あなたの例では、

[dict allKeysForObject: [NSArray arrayWithObjects: 
                            [NSNumber numberWithInt:2],
                            [NSNumber numberWithInt:3],
                            nil]]]

@"Boat"だけを含む配列を取得する必要があります

于 2012-08-09T18:24:10.623 に答える