NSDictionary:为每个键存储3个浮点值

时间:2011-04-29 12:19:44

标签: objective-c nsdictionary

我该怎么做?基本上我想存储可以响应颜色名称检索的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))

Color是一个存储3个值的类。 在Objective-C中尝试这样做会让我陷入困境和奇怪的错误!我发现的大多数字典示例都只是匹配2个字符串。当然我可以在.mm文件中使用C ++代码,但如果有人有任何想法如何实现这个Obj-C方式,我很高兴学习,谢谢。

3 个答案:

答案 0 :(得分:0)

在Cocoa中完全相同 - 使用NSDictionary而不是unordered_map,NSString而不是const char *用于键和UIColor而不是Color用于对象,你就完成了。

例如,[NSDictionary dictionaryWithObject: [UIColor redColor] forKey: @"Red"]]创建单一条目地图。调整多种颜色,你就完全了。如果你不在iOS上,请使用NSColor。

您可能错过了字典是(几乎)无类型集合的关键点,因此它可以使用异类密钥类型集存储异构的对象类型集。

答案 1 :(得分:0)

如果你的颜色对象扩展了NSObject,你应该能够将这些颜色存储为NSDictionary中的值。

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

这应该有效,然后你会使用

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

然后从您的对象访问您的颜色。

此外,不确定您的颜色对象的用途,但您可以使用NSColor用于Cocoa,或UIColor用于Cocoa-touch来存储它们。

(我没有测试过这段代码,只是从内存中写的)

答案 2 :(得分:0)

如果您想使用UIColor对象或类似对象,其他答案将涵盖它。如果你真的想存储三个花车,你有几个选择。您可以为每个浮点数存储三个NSNumber的NSArray:

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];