带字典的数组的iphone索引

时间:2011-12-01 12:31:45

标签: iphone objective-c ios nsmutablearray nsmutabledictionary

我有一个带字典的数组,

。如何获取特定字典的索引... [我在哪里获得了我想要查找的字典的数据,但需要索引是否已开启]

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

中获取字典进行比较

谢谢!

2 个答案:

答案 0 :(得分:2)

使用以下代码

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;

}];

答案 1 :(得分:2)

NSDictionary对象具有以下比较方法:

- (BOOL)isEqualToDictionary:(NSDictionary *)otherDictionary

通过以下讨论

  

如果两个词典各自具有相同的数字,则它们具有相同的内容   对于给定的键,条目和对应的值对象   每个字典满足isEqual:test。

这应该是你的情况。遗憾的是你不能改变NSArray用来计算indexOfObject的方法:所以它无法帮助你,因此Denis提供的解决方案是我能想到的最好的解决方案(除非你想要继承NSArray我不推荐使用它)。 / p>


作为Denis回答的补充,您可以使用NSArray方法

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

而不是

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

如果阵列中有多个相同的对象,则可能。