NSDictionary 不区分大小写的键

问题描述 投票:0回答:5

我尝试在 NSDictionary 上使用区分大小写的 JSON 响应,因为有时我的响应键类型会有所不同,有些是驼峰式大小写,有些是小写或其他混合组合。是否有任何内置功能可以检查这种情况下的不敏感情况?

谢谢。

ios objective-c cocoa ios5 nsdictionary
5个回答
6
投票

最近我分享了两门可能适合您需求的课程。它们提供不区分大小写的操作(以

NSDictionary
NSMutableDictionary
方法命名),同时保留最初插入的键。

尝试一下:

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


5
投票

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

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

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

这会将字符串更改为姓氏,或者如果我使用大写字符串,它将是姓氏

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

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

3
投票
- (NSString *)lowercaseString

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


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


0
投票

另一种方法是使用 NSString 的子类,它以忽略大小写(或变音符号等)的方式比较键。

优点是它将原始字符串保留在字典中。它在您想要将刺痛与其他语言特定规则进行比较的任何其他地方也很有用。

但是,此方法要求您首先将 JSON 字典中的键转换为该特定字符串类型的实例,然后将它们放回字典中。这意味着如果您从 JSON 字符串创建字典,这不是一个简单的方法。

我制作了这样一个子类,请参阅https://gist.github.com/tempelmann/0721dc3bc7b39b1eeb7095e2baf34516

另请参阅我的相关答案

© www.soinside.com 2019 - 2024. All rights reserved.