在NSMutableSet中查找具有相同属性值的对象

时间:2011-05-07 14:14:02

标签: iphone objective-c nsmutableset

我有NSMutableSet对象。所有对象显然都是唯一的,但它们可能具有相同的 .angle 值,即NSInteger属性。

我需要找出是否有两个或更多具有相同 .angle 值的对象,然后分组到数组中。

我该怎么办?
任何指导都将非常感谢

3 个答案:

答案 0 :(得分:12)

使用NSPredicate实例过滤您感兴趣的属性。例如:

NSSet *dogs = [NSSet setWithObjects:
                [Dog dogWithName:@"Fido" age:2],
                [Dog dogWithName:@"Fluffy" age: 3],
                [Dog dogWithName:@"Spot" age:2],
                nil];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age == %d", 2];
NSSet *twoYearOldDogs = [dogs filteredSetUsingPredicate:predicate];

NSLog(@"%@", twoYearOldDogs);

答案 1 :(得分:0)

可能取决于您设置的数据量。如果大,您可能必须按.angle排序并查找重复项。简单的方法就是创建数据集的副本,迭代它,对于项目N,查看N + 1到所有具有相同.angle的结尾,如果找到,则从这个副本集中删除它们并添加到输出集。

答案 2 :(得分:0)

您可以使用sortUsingFunction:context:NSMutableArray的方法。 (虽然它用于排序,但您可以更高效地完成任务)。

  NSComparisonResult compare(YourClass *firstObject, YourClass *secondObject, void *context) {
  if ([firstObject angle] < [secondObject angle])
    return NSOrderedAscending;
  else if ([firstObject angle] > [secondObject angle])
    return NSOrderedDescending;
  else 
  {
    //Normally here NSOrderedSame is returned. 
    //Put your logic stuff here.i.e. storing object for having common angle.
  }
}

希望它有所帮助。