我正在尝试在NSDictionary的JSON响应中使用不区分大小写的情况,因为有时我的响应键类型会有所变化,有些是驼峰式,有些是小写或其他混合组合。是否有任何内置功能可以检查这种情况下的不敏感案例?
谢谢。
我正在尝试在NSDictionary的JSON响应中使用不区分大小写的情况,因为有时我的响应键类型会有所变化,有些是驼峰式,有些是小写或其他混合组合。是否有任何内置功能可以检查这种情况下的不敏感案例?
谢谢。
NSDictionary
和 NSMutableDictionary
方法命名),同时保留了最初插入的键。log(n)
复杂度。大多数解决方案会放弃其中一个。 - Peter最好的方法是将NSDictionary的键设置为全部小写或全部大写;
例如,假设我有一个字符串的NSArray。在使用它之前,我可以获取keyName并使用lowercaseString或uppercaseString进行转换。
NSString *itemName = @"lastName";
itemName = [itemName lowercaseString];
这将把字符串更改为姓氏,如果我使用了uppercaseString,它将变成LASTNAME。
或者您也可以在添加到字典时更改键名,如下所示:
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:objectToAdd forKey:[key uppercaseString]];
- (NSString *)lowercaseString
这是NSString的默认方法,只需在添加到NSMutableDictionary时执行[key lowercaseString],或者从中读取时执行即可。
CaseInsensitive[Mutable]Dictionary
子类,它是 NS[Mutable]Dictionary
的子类。您将覆盖每个以键作为参数的方法,并使用 [key lowercaseString]
调用超级方法。现在您的客户端代码仍然保持完美可读性:它只需要使用 CaseInsensitiveMutableDictionary
而不是 NSMutableDictionary
。 - Timo- (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;
}