2011-04-29 49 views
0

我该怎么做?基本上我想存储RGB颜色值,这些颜色值可以通过颜色名称进行检索。我的C++代码使用boost unordered_map来执行此操作:NSDictionary:为每个键存储3个浮点值

("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个字符串。当然,我可以在.mm文件中使用C++代码,但如果任何人有任何想法如何实现这种Obj-C方式,我很乐意学习,谢谢。

回答

0

它在Cocoa中完全一样 - 使用NSDictionary而不是unordered_map,而不是使用const char *替代unordered_map,而使用UIColor替代对象的Color并完成。

例如,[NSDictionary dictionaryWithObject: [UIColor redColor] forKey: @"Red"]]来创建单入口地图。调整为多种颜色,你就全部设置好了。如果您不在iOS上,请使用NSColor。

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

0

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

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

这应该工作,然后你会使用

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

,然后从对象访问你的颜色。

此外,不确定您的颜色对象的目的,但您可以使用可可触摸的NSColor或可可触摸的UIColor来存储这些对象。

+0

布赖恩您好,感谢,我如何避免泄漏的所有为字典创建的Color对象是否被复制到那里?当字典出现时它们会被破坏,还是应该单独释放? – 2011-04-29 12:50:24

+0

如果您使用UIColor类方法之一,如'[UIColor redColor]'或[UIColor colorWithRed:.5 green:.2 blue:.7 alpha:1]',则不必担心泄漏它们。您不会得到“拥有”引用,因此您不必释放它,并且NSDictionary将在适当时保留并释放它。 – 2011-11-24 02:21:46

0

(我没有测试此代码,只需从内存中写道)如果你想使用一个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]; 
相关问题