使用iPhone sdk中的NSPredicate从NSMutableArray中获取不同的实体对象

Gir*_*ish 5 objective-c nsmutablearray ios

我有一个NSMutableArray实体类对象作为其对象.现在我想从中删除不同的对象.考虑以下示例

Entity *entity = [[Entity alloc] init]; 
entity.iUserId = 1;
entity.iUserName = @"Giri"
[arr addObject:entity];

Entity *entity = [[Entity alloc] init]; 
entity.iUserId = 2;
entity.iUserName = @"Sunil"
[arr addObject:entity];

Entity *entity = [[Entity alloc] init]; 
entity.iUserId = 3;
entity.iUserName = @"Giri"
[arr addObject:entity];
Run Code Online (Sandbox Code Playgroud)

现在我只想Array删除重复的iUserName 中的两个对象.我知道通过迭代的方式,但我想要它,而不是像predicate其他方式迭代它.如果有人知道那么请帮助我.我曾尝试过使用[arr valueForKeyPath:@"distinctUnionOfObjects.iUsername"];但它不会让我退回已经退出的物体.

这个问题与之前提出的问题完全不同.以前问的问题是让不同的对象是正确的,但他们使用循环而我不想这样.我希望它NSPredicate或任何其他简单的选项,以避免循环.

Jay*_*bit 0

好吧,你有几个选择(我能想到的)。

  1. 使用 NSSet 而不是 NSArray。
  2. 使用 for 循环(但您不想遍历数组)
  3. 在将其添加到数组之前,使用谓词搜索 iUserName 来查看该名称是否存在。

就像是:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"iUserName == 'Giri'"];
NSArray *searchArray = [arr filterUsingPredicate:predicate];
Run Code Online (Sandbox Code Playgroud)