我该怎么做呢?基本上,我希望存储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方式实现这一点,我很乐意学习,谢谢。
发布于 2011-04-29 20:23:04
在Cocoa中也是如此--使用NSDictionary代替unordered_map,使用NSString代替const char*作为键,使用UIColor代替对象的颜色,这样就完成了。
例如,[NSDictionary dictionaryWithObject: [UIColor redColor] forKey: @"Red"]]来创建单条目映射。调整到多种颜色,你就都准备好了。如果不是在iOS上,请使用NSColor。
您可能忽略了一个关键点,即字典是(几乎)无类型的集合,所以它可以使用一组不同的键类型存储一组不同的对象类型。
发布于 2011-04-29 20:24:08
如果你的颜色对象扩展了NSObject,你应该能够将这些颜色存储为你的NSDictionary中的值。
NSDictionary *colors = [[NSDictionary alloc] initWithObjectsAndKeys:Color1, @"SlateBlue1", Color2, @"tan3", Color3, @"grey32", nil ];这应该行得通,然后你就可以使用
Color *mycolor = [colors objectForKey:@"SlateBlue1"];然后从你的对象访问你的颜色。
此外,不确定颜色对象的用途,但也可以使用Cocoa的NSColor或Cocoa-touch的UIColor来存储这些颜色对象。
(我还没有测试这段代码,只是从内存中写出来的)
发布于 2011-11-24 10:29:03
如果您想使用UIColor对象或类似的对象,其他答案将涵盖它。如果你真的想存储三个浮点数,你有几个选择。您可以为每个浮点数的三元组存储三个NSNumbers的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];https://stackoverflow.com/questions/5831926
复制相似问题