68 votes

Classement sur iOS des dictionnaires par clé du dictionnaire interne et affichage des données respectives dans la table

J'ai un tableau renseigné par les dictionnaires, J'ai besoin de trier mon tableau alfabetically par la clé de l'intérieur dictionnaire

c'est mon tableau:

tu dictus: (
    {
    brand = Ryul;
    productTitle = Any;
    quantity = 1;
    subBrand = "Ryul INJ";
    type = Product;
},
    {
    brand = Trol;
    productTitle = Different;
    quantity = 2;
    subBrand = "";
    type = Brand;
},
    {
    brand = Dtor;
    productTitle = Any;
    quantity = 1;
    subBrand = "";
    type = Product;
},
    {
    brand = Ryul;
    productTitle = Different;
    quantity = 2;
    subBrand = "Ryul CHES";
    type = SubBrand;
},
    {
    brand = Anan;
    productTitle = Any;
    quantity = 1;
    subBrand = "";
    type = Product;
}

)

donc, normalement, pour le tri d'un tableau que je vais utiliser,

myArray = [uniqueProdsArray sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];

mais comment vais-je aller à l'triés avec la clé :: branddu dictionnaire?

J'ai besoin d'afficher le tri des valeurs dans l'affichage de la table. Le problème est alors que le tri et l'affichage d'une clé avec le tableau les autres valeurs ne sont pas ne change pas (j'.e) le changement de titre tout en tri, mais le sous-titre reste le même, qui est de mauvaise valeur.

Merci!

113voto

QED Points 5350

Je pense que cela va le faire:

brandDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"brand" ascending:YES] autorelease];
sortDescriptors = [NSArray arrayWithObject:brandDescriptor];
sortedArray = [myArray sortedArrayUsingDescriptors:sortDescriptors];

J'ai tiré le code de Tri Descripteur de Sujets de Programmation. Aussi, Valeur-Clé de Codage entre en jeu, en ce qu' sortedArrayUsingDescriptors: enverra un valueForKey: pour chaque élément en myArray, puis utiliser les comparateurs de trier les valeurs renvoyées.

12voto

chandan Points 1831

Dans IOS 5, la version mise à niveau de l'objet NSSortDescriptor est le meilleur moyen de trier un tableau. Cela se fera de cette façon: -

 NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"brand" ascending:YES];

NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];

NSArray *sortedArray = [myArray sortedArrayUsingDescriptors:sortDescriptors];

myArray =[NSMutableArray arrayWithArray:sortedArray];
 

9voto

Prabhu Natarajan Points 360

Nous avons eu la solution en utilisant la méthode qui suit

 [self.jsonData sortUsingDescriptors: [NSArray arrayWithObjects: [NSSortDescriptor sortDescriptorWithKey:"fullname" ascending:YES], [NSSortDescriptor sortDescriptorWithKey:"id" ascending:NO], nil]];
 

Où:-

jsonData - MutableArray qui contient les données JSON analysées.

fullname - les données que nous voulons trier.

id - Données uniques fournies avec le dictionnaire interne.

1voto

IOS Rocks Points 602
     Just try it out easiest way...

      myArray = [[NSMutableArray alloc] init];
       NSMutableArray *tempArray = [[NSMutableArray alloc] init];
      [tempArray removeAllObjects];
      [tempArray addObjectsFromArray: myArray];

        NSString *key = @"brand";
        NSSortDescriptor *brandDescriptor = [[NSSortDescriptor alloc] initWithKey:key ascending:YES];
        NSArray *sortDescriptors = [NSArray arrayWithObjects:brandDescriptor,nil];
        NSArray *sortedArray = [tempArray sortedArrayUsingDescriptors:sortDescriptors];
        [brandDescriptor release];
        [tempArray removeAllObjects];
        tempArray = (NSMutableArray*)sortedArray;
        [myArray removeAllObjects];
        [myArray addObjectsFromArray:tempArray];

1voto

alok Points 45

tu peux le faire .

 NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
        [formatter setDateFormat:@"d LLLL yyyy"];

        NSComparator compareDates = ^(id string1, id string2)
        {
            NSDate *date1 = [formatter dateFromString:string1];
            NSDate *date2 = [formatter dateFromString:string2];

            return [date1 compare:date2];
        };
        NSSortDescriptor * sortDesc1 = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:NO comparator:compareDates];
        [array sortUsingDescriptors:[NSArray arrayWithObjects:sortDesc1, nil]];
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X