J'ai un tableau d'objets que je veux trier par deux clés. Les objets permettent de dire sont de type étudiant strong> et les propriétés que je suis incitée pour mon genre sont Student
{
double grade;
string name;
...
}
3 Réponses :
Vous devez essentiellement mettre en œuvre votre propre comparateur et utiliser l'un des méthodes de tri Nsarray code> (par exemple, SORTEDARRAYUSINGSELLector: > ) -(NSComparisonResult)compare:(Student *)student {
// sort by name
int nameComp = [name compare:student.name];
if (nameComp != NSOrderedSame) return nameComp;
// reverse ordered as desired in the question
if (grade > student.grade)
return NSOrderedAscending;
else if (grade == student.grade) // watchout here
return NSOrderedSame;
else
return NSOrderedDescending;
}
NSArray *unsrtedArray = ...
NSArray *sortedArray = [unsortedArray sortedArrayUsingSelector:@selector(compare:)];
Je suis assez facilesse sur ma connaissance de mon objectif-C, mais il y a de bons pointeurs ici et il y a Toujours le documentation . Voici ma cassette ...
NSSortDescriptor *gradeSorter = [[NSSortDescriptor alloc] initWithKey:@"grade" ascending:YES]; NSSortDescriptor *nameSorter = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES]; [personList sortUsingDescriptors:[NSArray arrayWithObjects:gradeSorter, nameSorter, nil]];
C'est le moyen le plus simple de le faire à mon avis. Le tri en utilisant des descripteurs de tri vous permet d'obtenir n'importe quel niveau de tri hiérarchique. C'est-à-dire que tous les objets sont triés selon le premier descripteur de tri, les doublons restants sont triés en fonction du deuxième troisième descripteur, etc. Si vous le souhaitez, voir Github.com/Lucastizma/spot_trot_helpers#nsarray+Stadditions pour mon Catégorie sur nsarray code> ( nsarray + stadditions code>) qui aide à consolider la syntaxe pour utiliser des descripteurs de tri.
_PSCHEDULEARR: Nom du tableau dans mon code ci-dessous. Ce tableau contient l'objet modèle personnalisé. Je comparais le tableau au nom de la date et de l'ordre alphabétique. La date est également présente dans la matrice intérieure (modèle de données de base).
_PSCHEDULEARR = [[_PSCHEDULEARR
SoyeDarrayUtilisationComparator: ^ NscomparisonResult (réunions * obj1,
Réunions * obj2) { p>