NNi*_*ikN 8 objective-c nsdictionary case-insensitive key-value ios
NSDictionary有objectForKey,但它是密钥的大小写.有没有提供类似的功能
- (id)objectForKey:(id)aKey options:(id) options;
Run Code Online (Sandbox Code Playgroud)
您可以在选项中传递"NSCaseInsensitiveSearch"
要从NSDictionary中获取密钥,这是一个案例不可能,可以使用下面编写的代码.
Sid*_*diq 12
您需要使用此功能添加NSDictionary类的类别
- (id)objectForCaseInsensitiveKey:(NSString *)key {
NSArray *allKeys = [self allKeys];
for (NSString *str in allKeys) {
if ([key caseInsensitiveCompare:str] == NSOrderedSame) {
return [self objectForKey:str];
}
}
return nil;
}
Run Code Online (Sandbox Code Playgroud)
由于以下几个原因,不包括此内容:
NSDictionary使用哈希等式,对于几乎任何好的哈希算法,源字符串中的任何变化都会产生不同的哈希值.
更重要的是,NSDictionary键不是字符串.符合NSCopying的任何对象都可以是字典键,并且包含的字符串多于字符串.NSNumber与NSBezierPath的不区分大小写的比较是什么样的?
这里的许多答案提供的解决方案相当于将字典转换为数组并迭代它.这是有效的,如果你只需要一次性,这很好.但是这种解决方案有点难看并且具有糟糕的性能特征.如果这是我的东西需要大量的(比如说,足以创造一个NSDictionary类),我希望妥善解决这个问题,在数据结构层次.
你想要的是一个包装NSDictionary的类,它只允许键的字符串,并在给出键时自动降低键(如果你需要双向映射,也可能记住原始键).这实现起来相当简单,设计更加简洁.这对于一次性来说太沉重了,但是如果这是你做了很多事情,我认为值得干净利落.
| 归档时间: |
|
| 查看次数: |
6312 次 |
| 最近记录: |