4

我将对象映射NSStringNSNumber对象,NSDictionary以便enum从 JSON 字符串中设置类型,如下所示:

typedef enum
{
    XXEnumTypeA,
    XXEnumTypeB,
    XXEnumTypeC,
} XXEnumType;

...

@property (nonatomic, assign) XXEnumType enumType;

...

self.mapNSStringToEnumType =
@{
    @"enumTypeA" : @(XXEnumTypeA),
    @"enumTypeB" : @(XXEnumTypeB),
    @"enumTypeC" : @(XXEnumTypeC),
};

...

self.enumType = [self.mapNSStringToEnumType[stringFromJSON] integerValue];

现在我想换一种方式,将enum值转换为字符串。我不想使用反向映射存储另一个字典,我使用的解决方案涉及通过映射字典进行线性搜索以查找值然后返回键。

在实践中,我的线性方法很好,性能和记忆都不是问题,但是从学术的角度来看,我很好奇是否有另一种我不知道的更有效的方法,或者可能是另一种类型的结构双向映射(确保所有值也是唯一的)?

4

2 回答 2

1

您可能想尝试以下方法:

#define S(x)    #x
#define TOS(x)  @S(x)

接着:

typedef enum {
    MyEnum_01
,   MyEnum_02
} MyEnum ;

- (void) test {
    NSLog(@"%@", TOS(MyEnum_01)) ;
    NSLog(@"%@", TOS(MyEnum_02)) ;
}
于 2013-08-06T22:47:19.307 回答
0

字典对象通常使用BST(二叉搜索树)或哈希表来实现。这两种数据结构都旨在有效地从键中查找值。如果您阅读这些算法的描述,您就会明白为什么会这样。实现高效双向查找的最佳方法可能是实现由两个字典支持的数据结构,其中键/值交换的类型。时间-空间复杂性的权衡可能是不可避免的。

于 2014-02-14T20:23:19.583 回答