NSDictionary的不区分大小写的键

时间:2012-05-24 00:20:21

标签: ios objective-c cocoa ios5 nsdictionary

我正在尝试在NSDictionary上使用针对JSON响应的incase敏感案例,因为有时候我的响应键类型会有所不同,有些是驼峰式,有些是小写或其他混合组合。在这种情况下是否有内置功能来检查灵敏度不足的情况?

感谢。

4 个答案:

答案 0 :(得分:6)

最近我分享了两个可能适合您需求的课程。它们提供不区分大小写的操作(以NSDictionaryNSMutableDictionary方法命名),同时保留最初插入的键。

试一试:

https://github.com/keeshux/ios-components/tree/master/Components/Utils/KSCIDictionary

答案 1 :(得分:5)

最好的方法是将NSDictionary的键设置为全小写或全部大写;

例如,假设我有一个NSArray字符串。我可以在使用之前获取keyName并使用lowercaseString或uppercaseString转换它

NSString *itemName = @"lastName"; 
itemName = [itemName lowercaseString];

这会将字符串更改为lastname,或者如果我使用uppercaseString,则它将是LASTNAME

或者您也可以在添加到字典时更改密钥名称,如下所示:

NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:objectToAdd forKey:[key uppercaseString]];

答案 2 :(得分:3)

- (NSString *)lowercaseString

这是一个默认的NSString方法,只需在添加或读取NSMutableDictionary时执行[key lowercaseString]。

答案 3 :(得分:0)

就我而言,我不需要所有的Dictionary方法或属性。我只需要不区分大小写的下标访问。我创建了一个自定义类(不是 NSMutableDictionary的超类)并实现了允许下标访问的方法并使这些不区分大小写:

- (id) objectForKeyedSubscript: (NSString *) key {
    NSMutableDictionary *theData = self->data;
    return theData[[key lowercaseString]];
}

- (void) setObject: (id) newValue forKeyedSubscript: (NSString *) key {
    NSMutableDictionary *theData = self->data;
    theData[[key lowercaseString]] = newValue;
}

另见: http://clang.llvm.org/docs/ObjectiveCLiterals.html