2015-08-28 56 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

你的朋友是NSPredicatNSSortDescriptor你可以找到在所提供的鏈接兩個蘋果文檔,一個簡單的方法來做到這一點是:

-(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長度]:無法識別的選擇器 –

+0

我使用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];