J'ai un NSArray
avec des objets qui ont une propriété name
.
Je voudrais filtrer le tableau par name
NSString *alphabet = [agencyIndex objectAtIndex:indexPath.section];
//---get all states beginning with the letter---
NSPredicate *predicate =
[NSPredicate predicateWithFormat:@"SELF beginswith[c] %@", alphabet];
NSMutableArray *listSimpl = [[NSMutableArray alloc] init];
for (int i=0; i<[[Database sharedDatabase].agents count]; i++) {
Town *_town = [[Database sharedDatabase].agents objectAtIndex:i];
[listSimpl addObject:_town];
}
NSArray *states = [listSimpl filteredArrayUsingPredicate:predicate];
Mais je reçois une erreur - "Impossible de faire une opération de sous-chaîne avec quelque chose qui n'est pas une chaîne (lhs = <1, Arrow> rhs = A)"
Comment puis-je faire ceci? Je voudrais filtrer le tableau pour la première lettre dans name
étant 'A'.
Essayez avec le code suivant
NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF like %@", yourName];
NSArray *filteredArr = [yourArray filteredArrayUsingPredicate:pred];
Édité:
NSPredicate
motif devrait être:
NSPredicate *pred =[NSPredicate predicateWithFormat:@"name beginswith[c] %@", alphabet];
Voici l'une des utilisations de base de NSPredicate pour filtrer un tableau.
NSMutableArray *array =
[NSMutableArray arrayWithObjects:@"Nick", @"Ben", @"Adam", @"Melissa", @"arbind", nil];
NSPredicate *sPredicate = [NSPredicate predicateWithFormat:@"SELF contains[c] 'b'"];
NSArray *beginWithB = [array filteredArrayUsingPredicate:sPredicate];
NSLog(@"beginwithB = %@",beginWithB);
NSArray offre un autre sélecteur pour trier les tableaux:
NSArray *sortedArray = [array sortedArrayUsingComparator:^NSComparisonResult(Person *first, Person *second) {
return [first.name compare:second.name];
}];
Si vous voulez filter array regardez ce code:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name == %@", @"qwe"];
NSArray *result = [self.categoryItems filteredArrayUsingPredicate:predicate];
Mais si vous voulez sort array, jetez un œil aux fonctions suivantes:
- (NSArray *)sortedArrayUsingFunction:(NSInteger (*)(id, id, void *))comparator context:(void *)context;
- (NSArray *)sortedArrayUsingFunction:(NSInteger (*)(id, id, void *))comparator context:(void *)context hint:(NSData *)hint;
- (NSArray *)sortedArrayUsingSelector:(SEL)comparator;
Commander cette bibliothèque
https://github.com/BadChoice/Collection
Il contient de nombreuses fonctions de tableau faciles à ne jamais écrire une boucle
Alors tu peux juste faire
NSArray* result = [thArray filter:^BOOL(NSString *text) {
return [[name substr:0] isEqualToString:@"A"];
}] sort];
Ceci ne récupère que les textes commençant par A triés alphabétiquement
Si vous le faites avec des objets:
NSArray* result = [thArray filter:^BOOL(AnObject *object) {
return [[object.name substr:0] isEqualToString:@"A"];
}] sort:@"name"];
utilisez ceci
[listArray sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];