индекс iphone массива со словарями - PullRequest
1 голос
/ 01 декабря 2011

у меня есть массив со словарями,

.как получить индекс для определенного словаря ... [где я получил данные для словаря, который я хочу найти, но нужен индекс включен]

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 ]

2 голосов
/ 01 декабря 2011

NSDictionary объекты имеют следующие методы сравнения:

- (BOOL)isEqualToDictionary:(NSDictionary *)otherDictionary

При следующем обсуждении

Два словаря имеют одинаковое содержание, если каждый из них содержит одинаковое количество записей и, дляПри заданном ключе соответствующие объекты значений в каждом словаре удовлетворяют требованиям isEqual: test.

Это должно иметь место для вас.К сожалению, вы не можете изменить метод, который NSArray использует для вычисления indexOfObject: поэтому он не может вам помочь, поэтому решение, предоставленное Денисом, - лучшее, что я могу придумать (если вы не представляете себе подклассы NSArray, который я бы не рекомендовал).1010 *


Так же, как дополнение к ответу Дениса, вы можете использовать метод NSArray

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

вместо

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

Если в массиве есть несколько одинаковых объектовесть возможность.

2 голосов
/ 01 декабря 2011

Используйте следующий код

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;

}];
...