NSDictionary: хранить 3 значения с плавающей запятой для каждого ключа - PullRequest
0 голосов
/ 29 апреля 2011

как я могу это сделать? В основном я хочу сохранить значения цвета RGB, которые можно получить в ответ на имя цвета. Мой код на C ++ использует boost unordered_map для этого:

("SlateBlue1", Color(0.5137f, 0.4353f,1.0f)) 
("tan3", Color(0.8039f, 0.5216f, 0.2471f)) 
("grey32", Color(0.3216f, 0.3216f, 0.3216f))

Цвет - это класс, в котором хранятся 3 значения. Попытка сделать это в Objective-C приводит меня в замешательство и странные ошибки! Большинство примеров словаря, которые я нашел, просто соответствуют 2 строкам. Конечно, я могу просто использовать код C ++ в файле .mm, но если у кого-то есть идеи, как добиться этого с помощью Obj-C, я был бы рад узнать, спасибо.

Ответы [ 3 ]

0 голосов
/ 29 апреля 2011

Если ваш цветовой объект расширяет NSObject, вы должны иметь возможность сохранить эти цвета в качестве значений в вашем NSDictionary.

NSDictionary *colors = [[NSDictionary alloc] initWithObjectsAndKeys:Color1, @"SlateBlue1", Color2, @"tan3", Color3, @"grey32", nil ];

Это должно сработать, и тогда вы будете использовать

Color *mycolor = [colors objectForKey:@"SlateBlue1"];

А затем получите доступ к своим цветам с вашего объекта.

Кроме того, вы не уверены в назначении вашего цветного объекта, но вы можете использовать NSColor для Какао или UIColor для Какао-касаниятакже сохраните их.

(я не тестировал этот код, только что написал из памяти)

0 голосов
/ 24 ноября 2011

Если вы хотите использовать объект UIColor или аналогичный, другие ответы покрывают его.Если вы действительно хотите хранить три поплавка, у вас есть несколько вариантов.Вы можете хранить NSArray из трех NSNumbers для каждой тройки чисел:

NSDictionary *d = [NSDictionary dictionaryWithObjectsAndKeys:
    [NSArray arrayWithObjects:[NSNumber numberWithFloat:.5], [NSNumber numberWithFloat:.7], [NSNumber numberWithFloat:.2], nil], @"bleem",
    ... // more array/string pairs
    nil];

Или вы можете использовать NSData для каждой тройки чисел:

NSDictionary *d = [NSDictionary dictionaryWithObjectsAndKeys:
    [NSData dataWithBytes:&(float[]){ .5, .7, .2} length:3*sizeof(float)], @"bleem",
    ... // more data/string pairs
    nil];
0 голосов
/ 29 апреля 2011

Точно так же в Какао - используйте NSDictionary вместо unordered_map, NSString вместо const char * для ключа и UIColor вместо Color для объекта, и все готово.

Например, [NSDictionary dictionaryWithObject: [UIColor redColor] forKey: @"Red"]] для создания однократной карты. Настройте несколько цветов, и все готово. Используйте NSColor, если вы не на iOS.

Возможно, вы упускаете ключевой момент, что словарь является (почти) нетипизированной коллекцией, поэтому он может хранить гетерогенный набор типов объектов, используя гетерогенный набор типов ключей.

...