5

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

我需要确定是否有两个或多个具有相同.angle值的对象,然后将它们分组到一个数组中。

我怎样才能做到这一点?
任何指导将不胜感激

4

3 回答 3

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);
于 2011-05-07T14:59:14.453 回答
0

可能取决于您的数据集有多大。如果很大,您可能需要按 .angle 排序并查找重复项。简单的方法是创建数据集的副本,对其进行迭代,对于项目 N,将所有具有相同 .angle 的 N+1 查看到末尾,如果找到,则将它们从该副本集中删除并添加到输出集中。

于 2011-05-07T14:44:01.900 回答
0

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

  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.
  }
}

希望能帮助到你。

于 2011-05-07T14:44:40.403 回答