-1

my questions is about iPhone development.

I'm trying to figure out if there is a way to count ONLY the number of dictionaries within a dictionary.

for example, let's say this is my dictionary

Dictionary contains 5 elements:

  1. string
  2. string
  3. NSDictionary
  4. NSDictionary
  5. NSDictionary

I would like to count only the NSDictionaries... so the return value should be 3.

Is there any way to accomplish this?

Thanks.

4

4 に答える 4

4
NSSet *dictKeys = [myDict keysOfEntriesPassingTest:^(id key, id obj, BOOL *stop) {
    return [obj isKindOfClass:[NSDictionary class]];
}];
NSUInteger numberOfDicts = [dictKeys count];
于 2012-06-22T15:31:02.653 に答える
1
NSDictionary* root = ...;

__block NSUInteger count = 0;
[root enumerateKeysAndObjectsUsingBlock: ^(id key, id obj, BOOL* stop) {
    if ( [obj isKindOfClass: NSDictionary.class] ) ++ count;
    *stop = NO;
}];

もちろん

NSUInteger count = 0;
for (id obj in root) {
    if ( [obj isKindOfClass: NSDictionary.class] ) ++ count;
}

同様に動作します。

于 2012-06-22T15:32:04.900 に答える
1
__block NSInteger countOfDictionaries = 0;

[dictionary enumerateKeysAndObjectsUsingBlock:(void (^)(id key, id obj, BOOL *stop))block             {
    if ([obj isKindOfClass:[NSDictionary class]]) {
          countOfDictionaries++;
    }
}];

上記のように、オブジェクトのクラスをテストすることにより、辞書のすべてのオブジェクトを列挙し、「NSDictionary」であるすべてのオブジェクトのカウントを保持します。

于 2012-06-22T16:33:43.977 に答える
0

NSEnumrator を使用して NSDictionary をループし、次のテストを実行します。

if ([myObject クラス] == [NSDictionary クラス]) c++;

于 2012-06-22T15:28:49.587 に答える