2016-07-16 4 views
1

У меня есть массив словарей в следующем форматеКак получить последний элемент из NSMutableArray, в котором статус завершен?

[ 
{ 
"status":"not completed", 
"rating":2 
},{ 
"status":"completed", 
"rating":2 
},{ 
"status":"not completed", 
"rating":"<null>" 
},{ 
"status":"completed", 
"rating":"<null>"},{ 
"status":"not completed", 
"rating":"<null>" 
} 
] 

и от этого я хочу ответ, как последний объект, где статус завершения и оценка равна нулю

output 
{ 
    "status":"completed", 
    "rating":"<null>" 
} 

как я получаю второй элемент легко и без любая большая итерация.

В этом случае этот массив может содержать 150-300 элементов.

-(void)checkRecentUnratedOrder:(NSMutableArray *)order{ 

    NSLog(@"trip log - %@",[order valueForKey:@"status"]); // total 5 objects inside array in that 4 of them are completed 

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self.status == completed"]; 
    NSArray *arr = [order filteredArrayUsingPredicate:predicate]; 

    NSLog(@"trip arr%@",arr); 




} 

консоль enter image description here

+0

Начало в конце массива и перебирать в обратном направлении. Как только вы найдете элемент со статусом «завершен», верните его. – smarx

ответ

1

Вы должны predicate свой массив как этот

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self.status == 'completed'"]; 
NSArray *arr = [order filteredArrayUsingPredicate:predicate]; 
// Now `arr` contains all the `dictionary` that `status` key contain `completed` value. 
+0

Могу ли я добавить несколько условий в предикат? – Bangalore

+1

Да, используя разделитель 'и'/'или' на основе условия. –

+0

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

Смежные вопросы