簡體   English   中英

如何根據其關鍵的“ id”升序對NSDictionary進行排序?

[英]How to sort this NSDictionary based on its key “id” ascending order?

嗨,這是從服務器得到的

{
        1 =         {

            "display_name" = "One";
            id = 1;
     };
      2 =         {

            "display_name" = "Two";
            id = 2;
     };
      13 =         {

            "display_name" = "abc";
            id = 13;
     };
      15 =         {

            "display_name" = "aaa";
            id = 15;
     };
     4 =         {

            "display_name" = "ffd";
            id = 4;
     };
      3 =         {

            "display_name" = "abdfdfc";
            id = 3;
     };
      5 =         {

            "display_name" = "aasdfsdfa";
            id = 5;
     };
}

我需要根據“ id”對它進行排序,這就是輸出的內容

預期產量

{
        1 =         {

            "display_name" = "One";
            id = 1;
     };
      2 =         {

            "display_name" = "Two";
            id = 2;
     };
      3 =         {

            "display_name" = "abdfdfc";
            id = 3;
     };
      4 =         {

            "display_name" = "ffd";
            id = 4;
     };
     5 =         {

            "display_name" = "aasdfsdfa";
            id = 5;
     };
      13 =         {

            "display_name" = "abc";
            id = 13;
     };
      15 =         {

            "display_name" = "aaa";
            id = 15;
     };
}

我嘗試過此代碼,但無法正常工作

 //vehiclesDictionary   real dictionary
        NSMutableArray *sortedKeys=[[NSMutableArray alloc]init];
         for(NSString *item in [vehiclesDictionary allKeys]){
             [sortedKeys addObject:[NSNumber numberWithInt:[item intValue]]];
         }


         NSArray *sortedKeysArray = [sortedKeys sortedArrayUsingSelector: @selector(compare:)];
         NSLog(@"%@",sortedKeysArray);

         NSMutableDictionary *sortedValues = [[NSMutableDictionary alloc] init];
         for (NSString *key in sortedKeysArray) {
             [sortedValues setValue:[vehiclesDictionary valueForKey:[NSString stringWithFormat:@"%@",key]] forKey:key];
         }

         NSLog(@"%@",sortedValues);

請幫助我

您不能對NSDictionary進行排序,它是未排序的集合類型。 您將需要將密鑰存儲在數組中並對其進行排序,然后使用它按順序訪問NSDictionary。

根據上面的代碼,可以對其進行如下修改,例如

NSDictionary *dict = [NSDictionary dictionary];

NSArray *sortedKeys = [[dict allKeys] sortedArrayUsingSelector:@selector(compare:)];

for (NSString *key in sortedKeys) {
    NSLog(@"%@", [d objectForKey:key]);

    // Do something with the object here
}

在這里,您可以使用NSDictionary傳遞sortedKeys數組,並使用sortedKeys數組按順序訪問NSDictionary。

一種更簡潔的方法來獲取數組,但具有與上述相同的結果,將使用:

NSDictionary -keysSortedByValueUsingComparator如圖所示這里

正如其他人提到的, NSDictionaries無法排序。 但是,您可以執行以下操作:

-(NSArray *)sortedKeysFromDictionary:(NSDictionary *)dictionary ascending:(BOOL)ascending
{
    /* get all keys from dictionary */
    NSArray *allKeys = [dictionary allKeys];

    NSString *key = @"id"; // using "id" as key here

    /* sort keys */
    NSSortDescriptor *dateDescriptor = [NSSortDescriptor sortDescriptorWithKey:key ascending:ascending];
    return [NSArray arrayWithArray:[allKeys sortedArrayUsingDescriptors:@[dateDescriptor]]];
}

這將獲取字典中的所有鍵,根據需要按升序或降序對其進行排序,並將其作為NSArray返回。 然后可以使用此數組訪問原始字典。 示例實現如下所示:

for (NSString *key in [self sortedKeysFromDictionary:sampleDic ascending:NO])
{
    /* get value from current key */
    NSDictionary *currentDic = [sampleDic objectForKey:key];
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM