2016-04-08 23 views
0

Merhaba Bu sunucudan alıyorum budurBu "NSDictionary" anahtarını "id" anahtarına göre nasıl sıralayabilirim?

{ 
     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; 
    }; 
} 

i "id" dayalı bu sıralamak için bu çıkışa

bekleniyor çıkış

{ 
     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; 
    }; 
} 

Bu kod i olarak ne arıyorum ihtiyacımız olan denedim ve çalışmaz

//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); 

Pls bana yardım et

+0

lütfen çalışmıyor. –

+0

[NSDictionary anahtarlarının ilgili değerlerine göre sıralanması] 'nin olası kopyası (http://stackoverflow.com/questions/9708742/getting-nsdictionary-keys-sorted-by-their-viewpective-values) –

+3

Temel olarak bir sözlük sıralanmamıştır tanıma göre toplama türü ve sıralanamaz. – vadian

cevap

1

NSDictionary ürününü sıralayamazsınız, sıralanmamış bir koleksiyon türüdür. Anahtarlarınızı bir dizide saklamanız ve bunu sıralamanız ve sırayla NSDictionary öğesine erişmek için kullanmanız gerekecektir.

Yukarıdaki kodunuza dayanarak, aşağıdaki gibi değiştirilebilir, ör. İşte

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 
} 

Eğer NSDictionary ile sortedKeys dizinin etrafında geçmek ve NSDictionary için sipariş erişimi için sortedKeys dizisini kullanabilirsiniz.

daha kısa bir yaklaşım

dizi elde etmek için, ancak yukarıdaki ile aynı sonuç ile, kullanılarak olur: here gösterilmiştir

NSDictionary -keysSortedByValueUsingComparator olarak.

+0

Bu ne yaptım ve bu veri – Bangalore

+0

sipariş vermeyecektir Bu kodu düzenleyebilirsiniz – Bangalore

+0

Bu, ne yaptınız değil, çünkü bir sözlük değil, bir diziye anahtarları ekler çünkü. BTW: Bir dizi yerine düzenli bir set seçerdim. –

0

Diğerleri gibi, NSDictionaries listelenemez. Bu, sizin sözlükten tüm anahtarları almak istediğiniz gibi artan veya azalan sırayla sıralamak ve bir NSArray olarak bu dönecektir

-(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]]]; 
} 

: Ancak, böyle bir şey yapabilirdi. Bu dizi daha sonra orijinal sözlüğe erişmek için kullanılabilir. Örnek bir uygulama şöyle görünecektir:

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