加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – 如何有效地获取NSDictionary中键值的反向映射?

发布时间:2020-12-16 07:05:31 所属栏目:百科 来源:网络整理
导读:我将NSString对象映射到NSDictionary中的NSNumber对象,以便从 JSON字符串设置枚举类型,如下所示: typedef enum{ XXEnumTypeA,XXEnumTypeB,XXEnumTypeC,} XXEnumType;...@property (nonatomic,assign) XXEnumType enumType;...self.mapNSStringToEnumType =@
我将NSString对象映射到NSDictionary中的NSNumber对象,以便从 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];

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

在实践中,我的线性方法很好,性能和记忆都不是问题,但是从学术观点我很好奇,如果还有另一种我不了解的更有效的方法,或者可能是一种不同类型的结构.两种方式的映射(确保所有值都是唯一的)?

解决方法

你可能想尝试这些方面的东西:

#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)) ;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读