2014-11-10 6 views
-1

У меня есть массив, который содержит несколько словарей. смотрите пример ниже:Сортировка массива словарей в ios

Пример:

Main Array:

(
    { 
     Title: "A"; 
     Value: 1; 
     Priority: 
     (
      4 //Problem: contains array as value which need to be sorted 
     ); 
    }, 
    { 
     Title: "B"; 
     Value: 2; 
     Priority: 
     (
      3 //Problem: contains array as value which need to be sorted 
     ); 
    }, 
    { 
     Title: "C"; 
     Value: 3; 
    }, 
    { 
     Title: "D"; 
     Value: 4; 
     Priority: 
     (
     ); 
    }, 
    { 
     Title: "E"; 
     Value: 5; 
     Priority: null 
    }, 
) 

мне нужно для сортировки основного массива как на "приоритет" в dictioanry. Значения приоритета - это массив.

Как я могу достичь этой сортировки?

Помоги мне решить эту проблему ...

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

+0

Ваши приоритеты строки или числа? – Rob

+0

@Rob, На самом деле мне нужно преобразовать в Integer из String & then Sort out. – user2893370

ответ

0

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

NSSortDescriptor *desc = [[NSSortDescriptor alloc] initWithKey:@"Title" ascending:YES]; 
[arr sortUsingDescriptors:[NSArray arrayWithObject:desc]]; 

Или другой вариант может быть sortedArrayUsingComparator

[arr sortedArrayUsingComparator:^(NSDictionary *item1, NSDictionary *item2) { 
    NSString *first = [item1 objectForKey:@"Title"]; 
    NSString *second = [item2 objectForKey:@"Title"]; 
    return [first compare:second options:NSLiteralSearch]; 
}]; 
+0

Спасибо за ответ ... но я хочу сортировать в соответствии с «Приоритетом». – user2893370

+0

Что вы храните в prority –

+0

, как вы видите выше, некоторые имеют приоритет в порядке убывания, например 4,3,2, ... – user2893370

0

Try это. Если вам нужно обратное, то просто изменить порядок, если-то еще условие

[mainArray sortedArrayUsingComparator:^(NSDictionary *dic1, NSDictionary *dic2) { 
    int priority1 = [[[dic1 objectForKey:@"Priority"] objectAtIndex:0] intValue]; 
    int priority2 = [[[dic2 objectForKey:@"Priority"] objectAtIndex:0] intValue]; 

    if(priority1 < priority2) return NSOrderedAscending; 
    else if(priority1 > priority2) return NSOrderedDescending; 
    else return NSOrderedSame; 

}]; 
0
 NSArray *mainArray = @[ 
         @{ 
          @"Title":@"A", 
          @"value":@"1", 
          @"priority":@[[NSNumber numberWithInt:4]] 
         }, 

         @{ 
          @"Title":@"F", 
          @"value":@"1", 
          @"priority":@[[NSNumber numberWithInt:1]] 
         }, 

         @{ 
          @"Title":@"E", 
          @"value":@"1", 
          @"priority":@[] 
          }, 

         @{ 
          @"Title":@"C", 
          @"value":@"1", 
          @"priority":@[[NSNumber numberWithInt:3]] 
         }, 

         @{ 
          @"Title":@"D", 
          @"value":@"1", 
          @"priority":@[[NSNumber numberWithInt:5]] 
         }, 

         @{ 
          @"Title":@"B", 
          @"value":@"1", 
          @"priority":@[[NSNumber numberWithInt:2]] 
         }, 

         @{ 
          @"Title":@"E", 
          @"value":@"1", 
          @"priority":@[] 
         }, 

         @{ 
          @"Title":@"G", 
          @"value":@"1", 
          @"priority":[NSNull null] 
         } 
         ]; 



    NSArray *sortedArray = [mainArray sortedArrayUsingComparator:^(NSDictionary *dic1, NSDictionary *dic2) { 

     int priority1 = 0,priority2 = 0; 

     if([[dic1 objectForKey:@"priority"] isKindOfClass:[NSArray class]]){ 
      NSArray *arr = (NSArray *)[dic1 objectForKey:@"priority"]; 
      if(arr.count != 0) 
       priority1 = [[arr objectAtIndex:0] intValue]; 
     } 

     if([[dic2 objectForKey:@"priority"] isKindOfClass:[NSArray class]]){ 
      NSArray *arr = (NSArray *)[dic2 objectForKey:@"priority"]; 
      if(arr.count != 0) 
       priority2 = [[arr objectAtIndex:0] intValue]; 
     } 

     if(priority1 > priority2) return NSOrderedAscending; 
     else if(priority1 < priority2) return NSOrderedDescending; 
     else return NSOrderedSame; 

    }]; 



> The OutPut is in my LOG: 
> 
> 2014-11-10 12:09:20.925 Sort Array[1624:591502] sorted array: (
>   { 
>   Title = D; 
>   priority =   (
>    5 
>  ); 
>   value = 1; 
>  }, 
>   { 
>   Title = A; 
>   priority =   (
>    4 
>  ); 
>   value = 1; 
>  }, 
>   { 
>   Title = C; 
>   priority =   (
>    3 
>  ); 
>   value = 1; 
>  }, 
>   { 
>   Title = B; 
>   priority =   (
>    2 
>  ); 
>   value = 1; 
>  }, 
>   { 
>   Title = F; 
>   priority =   (
>    1 
>  ); 
>   value = 1; 
>  }, 
>   { 
>   Title = E; 
>   priority =   (
>  ); 
>   value = 1; 
>  }, 
>   { 
>   Title = E; 
>   priority =   (
>  ); 
>   value = 1; 
>  }, 
>   { 
>   Title = G; 
>   priority = "<null>"; 
>   value = 1; 
>  }) 
+0

Если у кого-то есть какой-нибудь эффективный ответ, чем мой ответ PLZ, дайте мне знать, я бы очень признателен :) – HasanRaza

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