положение массива target-c - PullRequest
       14

положение массива target-c

0 голосов
/ 27 сентября 2011

У меня есть NSArray. Допустим, у меня есть 3 объекта внутри. * 1001 например *

test (
        {
        Code = A;
        Comment = "None ";
        Core = Core;
},{
        Code = B;
        Comment = "None ";
        Core = Core;
},{
        Code = C;
        Comment = "None ";
        Core = Core;
})

Я хочу найти «Код» и вернуть индекс массива. Как я могу это сделать? например найдите код «b», и я получу «1» (начиная со второй позиции в массиве).

Ответы [ 3 ]

2 голосов
/ 27 сентября 2011

С макушки головы, чтобы в ней могли быть некоторые опечатки.Я предполагаю, что объекты внутри вашего массива являются словарями:

for (NSDictionary dict in testArray)
{
    if ([[dict objectForKey:"Code"] isEqualToString:@"B"]
    {
        NSLog (@"Index of object is %@", [testArray indexOfObject:dict]);
    }
}

Вы также можете использовать (возможно, более эффективно)

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

, передавая предикат @"Code == 'B'" в блоке.Этот метод будет специально возвращать индекс объектов, проходящих тест.

0 голосов
/ 27 сентября 2011

В простейшей форме я бы использовал следующее:

- (NSInteger)indexForText:(NSString*)text inArray:(NSArray*)array
{
  NSInteger index;
  [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    YourObject* o = (YourObject*)obj;
    if ([[o property] isEqualToString:text]) {
      index = idx;
      *stop = YES;
    }
  }];
  return index;
}
0 голосов
/ 27 сентября 2011

Если нацелена на iOS 4.0 или выше, есть методы NSArray, которые позволяют вам делать это с помощью блоков.

– indexOfObjectPassingTest:
– indexesOfObjectsPassingTest:
и т.д ..

NSArray *test = [NSArray arrayWithObjects:
                 [NSDictionary dictionaryWithObjectsAndKeys:@"A", @"Code", @"None", @"Comment", @"Core", @"Core", nil],
                 [NSDictionary dictionaryWithObjectsAndKeys:@"B", @"Code", @"None", @"Comment", @"Core", @"Core", nil],
                 [NSDictionary dictionaryWithObjectsAndKeys:@"C", @"Code", @"None", @"Comment", @"Core", @"Core", nil],
                 nil];
NSIndexSet *indexes =[test indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
    return [[obj valueForKey:@"Code"] isEqualToString:@"B"];
}];

NSLog(@"Indexes with Code B: %@", indexes);
...