带有字典的数组的IPhone索引



我有一个字典数组,

。如何获得特定字典的索引…[我从哪里得到我想找的字典的数据,但需要索引]

NSMutableDictionary *dictois = [[NSMutableDictionary alloc]init];
[dictois setObject:@"easySpritedd" forKey:@"Nombre"];
[dictois setObject:@"X" forKey:@"290"];
[dictois setObject:@"Y" forKey:@"300"];
int fooIndex = [self.bloquesArray indexOfObject: dictois];

但是正如你所看到的,我还不知道如何在indexOfObject

中获得比较的字典

谢谢!

NSDictionary对象有以下比较方法:

- (BOOL)isEqualToDictionary:(NSDictionary *)otherDictionary

与以下讨论

如果两个字典中的数字相同,则它们的内容相等中对应的值对象每个字典都满足isEqual:测试。

这应该是你的情况。遗憾的是,你不能改变NSArray用来计算indexOfObject的方法:所以它不能帮助你,因此Denis提供的解决方案是我能想到的最好的(除非你喜欢子类化NSArray,我不建议)。


作为对Denis回答的补充你可以使用NSArray方法

- (NSIndexSet *)indexesOfObjectsPassingTest:(BOOL (^)(id obj, NSUInteger idx, BOOL *stop))predicate

代替

- (NSUInteger)indexOfObjectPassingTest:(BOOL (^)(id obj, NSUInteger idx, BOOL *stop))predicate

如果数组中可能有多个相等的对象

使用以下代码

NSMutableDictionary *dictois = [[NSMutableDictionary new]autorelease];
[dictois setObject:@"easySpritedd" forKey:@"Nombre"];
[dictois setObject:@"X" forKey:@"290"];
[dictois setObject:@"Y" forKey:@"300"];
int fooIndex = [self.bloquesArray indexOfObjectPassingTest: ^(id obj, NSUInteger idx, BOOL *stop){
  if( [[obj class] isKindOfClass: [NSDictionary class]] ) {
    BOOL result = [obj isEqualToDictionary: diction];
    *stop = result;
    return result;
  }
  *stop = NO;
  return NO;
}];

最新更新