2015-04-07 87 views
-1

我需要列出所有的字典值。喜歡從高到低。我該如何處理?如何根據值重新排列NSDictionary?

我需要在表格視圖中列出所有標記以及相應的名稱和細節。

2015-04-06 14:48:53.381 camelProject[3310:597950] valueforkey title = (
    { 
    CamelID = 237; 
    Color = bg; 
    Comments = "Fhjfnfnfjfihgjfmsndidm,almcmcuirowmvn vmmc Jdmdmcm"; 
    CompID = 235; 
    DateOfBirth = "/Date(1424725200000)/"; 
    Description = "rtrtttrtrehndskvn;lkdf;lm;mgemln;lm';' jknt;l"; 
    FromUserID = 564987631; 
    FromUsername = 564987631; 
    ID = 4; 
    IndvMarks = "5;5;3;4;2;2;2;2;5;9"; 
    Marks = 39; 
    Name = name3sv; 
    OutOF = 100; 
    ProfilePhoto = "2D0B36F3-71B3-4B5F-A375-7AD4D0AFF1AF.jpg\n"; 
    TOname = hasnam; 
    ToUserName = 564987631; 
    Types = dsfv; 
    UserID = 564987631; 
    fromname = hasnam; 
}, 
    { 
    CamelID = 237; 
    Color = bg; 
    Comments = ""; 
    CompID = 235; 
    DateOfBirth = "/Date(1424725200000)/"; 
    Description = "rtrtttrtrehndskvn;lkdf;lm;mgemln;lm';' jknt;l"; 
    FromUserID = 564987631; 
    FromUsername = 564987631; 
    ID = 5; 
    IndvMarks = "5;4;5;7;6;0;6;5;4;6"; 
    Marks = 48; 
    Name = name3sv; 
    OutOF = 100; 
    ProfilePhoto = "2D0B36F3-71B3-4B5F-A375-7AD4D0AFF1AF.jpg\n"; 
    TOname = hasnam; 
    ToUserName = 564987631; 
    Types = dsfv; 
    UserID = 564987631; 
    fromname = hasnam; 
}, 
    { 
    CamelID = 237; 
    Color = bg; 
    Comments = Gucjhkhvnkvnvnvknkjbkvjhvvkb; 
    CompID = 235; 
    DateOfBirth = "/Date(1424725200000)/"; 
    Description = "rtrtttrtrehndskvn;lkdf;lm;mgemln;lm';' jknt;l"; 
    FromUserID = 564987631; 
    FromUsername = 564987631; 
    ID = 6; 
    IndvMarks = "3;4;4;3;5;4;4;3;3;5"; 
    Marks = 38; 
    Name = name3sv; 
    OutOF = 100; 
    ProfilePhoto = "2D0B36F3-71B3-4B5F-A375-7AD4D0AFF1AF.jpg\n"; 
    TOname = hasnam; 
    ToUserName = 564987631; 
    Types = dsfv; 
    UserID = 564987631; 
    fromname = hasnam; 
}, 
    { 
    CamelID = 236; 
    Color = wejr; 
    Comments = "Jfj ki idhvjfn isms isn't if jfj Jen hik"; 
    CompID = 235; 
    DateOfBirth = "/Date(1427058000000)/"; 
    Description = jwenrfernkgr; 
    FromUserID = 564987631; 
    FromUsername = 564987631; 
    ID = 21; 
    IndvMarks = "8;6;10;10;10;7;5;8;9;5"; 
    Marks = 78; 
    Name = name; 
    OutOF = 100; 
    ProfilePhoto = "E7735AF4-8EAB-41E7-A3F2-3280DBED0389.jpg\n"; 
    TOname = lukman; 
    ToUserName = 564987634; 
    Types = wenjewfn; 
    UserID = 564987634; 
    fromname = hasnam; 
} 
) 
+0

嘗試這樣http://stackoverflow.com/questions/6851398/iphone-order-of-json-array – Spynet

回答

1

將值獲取到數組中並使用排序描述符對它們進行排序。

NSArray *array = [dictioanry objectForKey:@"title"]; 

NSSortDescriptor* marksDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"Marks" 
                     ascending:YES]; 
NSArray* sortedObjects = [array sortedArrayUsingDescriptors:[NSArray arrayWithObjects:marksDescriptor, nil]]; 

//YOu can put this object back into NSDictionary if you want it for later 

我認爲你的字典應該是這樣的。

enter image description here

所以上面的代碼應該努力值進行排序。以下是我測試過的示例代碼。

注意:將您的JSON字符串保存在test.json中並將其添加到您的項目中。 or download the file from here並把它添加到您的項目

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"json"]; 
    NSData *data = [NSData dataWithContentsOfFile:filePath]; 


    NSDictionary *jsonDictionary=[NSJSONSerialization 
           JSONObjectWithData:data 
           options:NSJSONReadingMutableLeaves 
           error:nil]; 

    NSLog(@"%@",jsonDictionary); 

    NSArray *array = [jsonDictionary objectForKey:@"title"]; 

    NSSortDescriptor* marksDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"Marks" 
                     ascending:YES]; 
    NSArray* sortedObjects = [array sortedArrayUsingDescriptors:[NSArray arrayWithObjects:marksDescriptor, nil]]; 


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

感謝您的快速響應,確定,但如何,現在用xml解析器來解析數據,服務返回json值,然後把它放到nsdictionary中,我的字典值是我上面發佈的,只是檢查並幫助我 – islahul

+0

@islahul我已經更新了一個樣本JSON – Priyatham51

+0

@Priyatham51的帖子,嘗試了很多次但異常[__NSArrayM objectForKey:]:無法識別的選擇器發送到實例0x7ce4d680 2015-04-07 10:47:54.653 camelProject [51999:2028442] ***終止應用程序,由於未捕獲的異常'NSInvalidArgumentException',原因:' - [__ NSArrayM目的ForKey:]:無法識別的選擇發送到實例0x7ce4d680' – islahul

0

例子:

NSArray *originalArray = @[ 
           @{@"page_no": @"27"}, 
           @{@"page_no": @"1"}, 
           @{@"page_no": @"12"}, 
           @{@"page_no": @"23"}, 
           @{@"page_no": @"3"}, 
           @{@"page_no": @"2"}, 
           @{@"page_no": @"17"}, 
           ]; 

    NSSortDescriptor *alphaNumSD = [NSSortDescriptor sortDescriptorWithKey:@"page_no" 
                   ascending:YES 
                   comparator:^(NSString *string1, NSString *string2) 
    { 
     return [string1 compare:string2 options:NSNumericSearch]; 
    }]; 


    NSArray *sortedArray = [originalArray sortedArrayUsingDescriptors:@[alphaNumSD]]; 
    NSLog(@"%@", sortedArray); 

輸出:

(
     { 
     "page_no" = 1; 
    }, 
     { 
     "page_no" = 2; 
    }, 
     { 
     "page_no" = 3; 
    }, 
     { 
     "page_no" = 12; 
    }, 
     { 
     "page_no" = 17; 
    }, 
     { 
     "page_no" = 23; 
    }, 
     { 
     "page_no" = 27; 
    } 
) 

預期它肯定工程。