0

NSMutableDictionaryを反復処理しようとしていますが、必要なものが得られないようです。文字列をそのような色にマッピングする辞書があります...

squareColors = [NSMutableDictionary dictionaryWithObjects: [NSMutableArray arrayWithObjects:
                                                                [NSNumber numberWithInt:0],
                                                                [NSNumber numberWithInt:0],
                                                                [NSNumber numberWithInt:0],
                                                                [NSNumber numberWithInt:0],
                                                                [NSNumber numberWithInt:0],
                                                                nil]

                                                      forKeys: [NSMutableArray arrayWithObjects:
                                                                @"yellow",
                                                                @"blue",
                                                                @"green",
                                                                @"purple",
                                                                @"orange",
                                                                nil]];

時間の経過とともに、各エントリの値は増加します。たまに辞書を調べて、一番多い色を選びたいです。どうすればいいですか?これが私が試していることですが、私はブロックに慣れていません。

__block int mostSquares = 0;
__block NSString* color = @"";
/* Look through the dictionary to find the color with the most number of squares */
[squareColors enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
   NSLog(@"%@ => %@", key, obj);
   NSInteger count = [key integerValue];
   if (count > mostSquares)
   {
        color = key;
        mostSquares = count;
   }
}];
4

3 に答える 3

3

コードに非常に単純なバグがあります。この行:

NSInteger count = [key integerValue];

する必要があります:

NSInteger count = [obj integerValue];

「キー」は色の名前、objは番号です。数値以外の文字列を呼び出すと。が得られるため、繰り返しごとにcountに設定されます。0integerValue0

于 2013-02-07T23:18:07.977 に答える
0

あなたの例を使った簡単な解決策:

NSMutableArray *arrayNumbers = [NSMutableArray arrayWithObjects:
                                [NSNumber numberWithInt:0],
                                [NSNumber numberWithInt:1],
                                [NSNumber numberWithInt:2],
                                [NSNumber numberWithInt:6],
                                [NSNumber numberWithInt:4],
                                nil];
NSMutableArray *arrayColours =  [NSMutableArray arrayWithObjects:
                                 @"yellow",
                                 @"blue",
                                 @"green",
                                 @"purple",
                                 @"orange",
                                 nil];
NSMutableDictionary *squareColors = [NSMutableDictionary dictionaryWithObjects:arrayNumbers
                                                                       forKeys:arrayColours];
NSUInteger indexOfArray = [arrayNumbers indexOfObject:[arrayNumbers valueForKeyPath:@"@max.intValue"]];
NSLog (@"Colour with largest value is %@", [arrayColours objectAtIndex:indexOfArray]);
于 2013-02-07T23:04:11.880 に答える
0

キーを配列に格納し、その配列を使用して反復できますか?とにかくすべてのキーを知る必要があるので、それはおそらく最も効率的な解決策でしょう。

于 2013-02-07T23:11:58.273 に答える