distinctUnionOfObjects不区分大小写

时间:2015-04-01 21:59:36

标签: objective-c nsarray unique

我有一个NSDictionary数组。每个数组项都有一个名为" Name"的键。现在我想根据此名称值删除重复的条目。

这项工作非常完美:

aMyArray = [aMyArray valueForKeyPath:@"@distinctUnionOfObjects.Name"];

问题是结果数组仍然包含重复字符串,基于案例。例如:[@" Franck"," franck"]

如何删除这些副本?

由于

1 个答案:

答案 0 :(得分:0)

您可以尝试这样做

// in your class implementation 
- (BOOL)isEqual:(id)object {
    if (![object isKindOfClass:[self class]]) {
        return NO;
    }
    typeof(self) obj = (typeof(self))object;
    return ([self.Name caseInsensitiveCompare:obj.Name] == NSOrderedSame);
}

- (NSUInteger)hash
{
    return [[self.Name lowercaseString] hash];
}

// and then 
NSSet *distinctObjects = [[NSSet alloc] initWithArray:array];
NSArray *result = distinctObjects.allObjects;

或者,您可以通过调动valueForKeyPath:来自定义此 KVC集合运算符来解析您的自定义DSL,可能会结束类似

的内容
aMyArray = [aMyArray valueForKeyPath:@"@distinctUnionOfObjects[caseInsensitive].Name"];

对我来说似乎不是一个好主意,但它肯定是解决问题的可行方案。