Получить индекс NSMutableArray в зависимости от свойства объекта? - PullRequest
2 голосов
/ 27 марта 2012

Я сейчас пытаюсь заполучить индекс NSMutableArray в зависимости от одного из свойств его объекта.

У меня есть xml-структура, такая как:

<timeperiod>
    <Day>
        <Date>20120325</Date>
    </Day>
    <Day>
        <Date>20120326</Date>
    </Day>
</timeperiod>

Теперь представьте, что xml-структура содержит каждый день в месяце.

Day и всеего свойства добавляются в NSMutableArray.

И что я хочу, это: получить индекс массива в зависимости от даты.

Я представляю что-то вроде этого в псевдокоде:

-(NSInteger)getIndexFromObjectProperty:(NSString *)property{

   // Givf index from array where date is for example 20120310

   //pseudo
   Return [myClassObject.ObjectArray indexFromProperty:property];


}

Я нашел это: Сортировка NSMutableArray по свойству объекта

Это сортируетиз свойств, но как получить индекс из свойства 0_0

Я также нашел это: Функция для получения индекса из массива объектов, имеющих определенное значение предоставленного свойства , которое могло бы помочь много, еслиСинтаксис работает из коробки: (

Любые советы и / или указатели будут высоко оценены.

Заранее спасибо.

РЕДАКТИРОВАТЬ IВ настоящее время пытаюсь получить ответы. Вернусь с обновлением.

EDIT2: Офис выгоняет меня из-за блокировки здания ... я вернусьтебе завтра ..

Ответы [ 5 ]

6 голосов
/ 28 марта 2012

Это действительно было не так сложно, как я думал, что будет ..

решается следующим образом ...

-(NSInteger)returnIndexFromDateProperty:(NSString *)property{


    NSInteger iIndex;

    for (int i = 0; i < [myArray count]; i++){

        if([property isEqualToString:[[myArray objectAtIndex:i]dateProperty]]){

            iIndex = i;
        }
    }    


    return iIndex;

}

Спасибо за все остальные ответы. Они много болтали в процессе мышления (не плохо).

5 голосов
/ 27 марта 2012

Вы можете использовать метод indexOfObjectPassingTest: для проверки каждого объекта с помощью блока , возвращающего BOOL.

-(NSInteger)getIndexFromObjectProperty:(NSString *)property{
    return [myArray indexOfObjectPassingTest:
        ^(id obj, NSUInteger idx, BOOL *stop) {
            // Return true if obj has the date that you are looking for.
            BOOL res;
            if ([property isEqualTo:[obj dateProperty]]) {
                res = YES;
                *stop = YES;
            } else {
                res = NO;
            }
            return res;
        }];
 }
1 голос
/ 27 марта 2012

Вы можете сделать это с NSPredicate

[array indexOfObject:[[array filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF.date == %@",date]] objectAtIndex:0]]
1 голос
/ 27 марта 2012

Вы можете использовать

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

Я не уверен, каков ваш формат даты, но, как я понял, это строка NSString, поэтому я бы сделал это так:

-(NSInteger)indexFromDate:(NSString *)date{

   return [myClassObject.ObjectArray indexOfObjectPassingTest:
             ^(id obj, NSUInteger idx, BOOL *stop) {
                return ([obj isEqualToString:myIdentifier]);
             }];
}
0 голосов
/ 27 марта 2012

Из вашего поста не ясно, какую структуру будет иметь ваш массив после помещения в него XML-данных. Это будет массив массивов? Массив словарей? Как правило, чтобы получить объект из массива, вы используете indexOfObject: или один из его вариантов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...