2015-08-28 5 views
-1

Моих NSMutableArray следующих значенийКак сортировать NSMutableArray с двумя ключевыми значениями

Я хочу, чтобы отсортировать этот массив в алфавитном порядке с помощью «category_name» и total_assets>0.00

Предложи мне сортировки кода

{ 
    CID = 1; 
    "category_name" = Art; 
    "rbg_color" = "1,187,212"; 
    "total_assets" = "12500.00"; 
}, 
{ 
    CID = 2; 
    "category_name" = Automobile; 
    "rbg_color" = "244,66,54"; 
    "total_assets" = "102600.00"; 
}, 
{ 
    CID = 3; 
    "category_name" = Banks; 
    "rbg_color" = "1,149,135"; 
    "total_assets" = "0.00"; 
}, 
{ 
    CID = 4; 
    "category_name" = Cash; 
    "rbg_color" = "75,175,79"; 
    "total_assets" = "25000.00"; 
}, 
{ 
    CID = 5; 
    "category_name" = Clothing; 
    "rbg_color" = "103,57,182"; 
    "total_assets" = "0.00"; 
}, 
{ 
    CID = 7; 
    "category_name" = Electronics; 
    "rbg_color" = "32,149,242"; 
    "total_assets" = "0.00"; 
}, 

{ 
    CID = 10; 
    "category_name" = Watches; 
    "rbg_color" = "139,194,74"; 
    "total_assets" = "0.00"; 
}, 
{ 
    CID = 11; 
    "category_name" = Wine; 
    "rbg_color" = "62,80,180"; 
    "total_assets" = "30500.00"; 
} 

ответ

1

ваши друзья NSPredicat и NSSortDescriptor вы можете найти Apple, документацию для обоих в ссылках, предоставляемых, простой способ сделать это состоит в следующем:

-(void)sortMeyhod 
{ 
    NSSortDescriptor *sortDescriptor; 
    //here you initialize the descriptor with key category_name , and it is case insensitive i.e capital or small 
    sortDescriptor=[[NSSortDescriptor alloc] initWithKey:@"category_name" 
              ascending:YES 
              selector:@selector(caseInsensitiveCompare:)]; 
    //create your descriptors array . 
    sortDescriptors = [NSArray arrayWithObject:sortDescriptor]; 
    //sort your array . 
    yourArray = [yourArray sortedArrayUsingDescriptors:sortDescriptors]; 
    //filter your array with a predicate . 
    NSPredicate * predicate = [NSPredicate predicateWithFormat:@"%K > 0.00" , @"total_assets"] ; 
    yourArray =[yourArray filteredArrayUsingPredicate:predicate] ; 
} 

я не полностью проверить код, но теоретически он должен работать , а также обратитесь к документации.

+0

что будет 'messages' здесь? –

0

Используйте это,

NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"category_name" ascending:YES]; 
tempArray=[yourArray sortedArrayUsingDescriptors:@[sort]]; 

NSSortDescriptor *sort1 = [NSSortDescriptor sortDescriptorWithKey:@"total_assets" ascending:YES]; 
sortedArray=[tempArray sortedArrayUsingDescriptors:@[sort1]]; 
1
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"category_name" ascending:YES]; 
NSArray *sortedArray = [myArray sortedArrayUsingDescriptors:@[sortDescriptor]]; 

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K > 0.00" , @"total_assets"] ; 
sortedArray = [sortedArray filteredArrayUsingPredicate:predicate]; 

NSLog(@"%@",sortedArray); 
+0

Сбой с ошибкой: [__NSCFNumber length]: непризнанный селектор –

+0

i исправлен с использованием 'NSPredicate * predicate = [NSPredicate predicateWithFormat: @"% K>% @ ", @" total_assets ", @" 0.00 "];' –

+0

Я попробовал в Xcode 7 beta 5.0 он отлично работал для меня. – suhit

0

Наконец его решена:

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"category_name" ascending:YES]; 
        NSArray *sortedCatg = [myArray sortedArrayUsingDescriptors:@[sortDescriptor]]; 
        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K > %@" , @"total_assets",@"0.00"] ; 
        sortedCatg = [sortedCatg filteredArrayUsingPredicate:predicate]; 
        NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"%K = %@" , @"total_assets",@"0.00"] ; 
        NSArray *sortedAssets = [myArray filteredArrayUsingPredicate:predicate1]; 

        myArray = [[NSMutableArray alloc]init]; 
        [myArray addObjectsFromArray:sortedCatg]; 
        [myArray addObjectsFromArray:sortedAssets];