Supposons que j'ai un array
ayant elements
"am","john","rosa","freedom"
. Je veux compare
ces éléments et le résultat serait le word
et le size of the longest word
. J'utilise objective C
.Comment comparer un élément de tableau?
Répondre
Il n'y a pas une façon « intégrée » de le faire, mais vous pouvez utiliser NSArray
« s sortedArrayUsingSelector:
et créer une catégorie sur NSString
pour fournir une méthode lengthCompare:
.
// NSString+LengthCompare.h
#import NSString.h
@interface NSString (LengthComparison)
- (NSComparisonResult)lengthCompare:(NSString *)aString;
@end
// NSString+LengthCompare.m
#import NSString+LengthCompare.h
@implememtation NSString (LengthComparison)
- (NSComparisonResult)lengthCompare:(NSString *)aString
{
if ([self length] < [aString length]) {
return NSOrderedAscending;
} else if ([self length] > [aString length]) {
return NSOrderedDescending;
} else {
return NSOrderedSame;
}
}
@end
Maintenant, vous pouvez trier une des chaînes par ordre croissant utilisant lengthCompare:
NSArray *array = [NSArray arrayWithObjects: @"am", @"john", @"rosa", @"freedom", nil];
NSArray *arraySortedByStringLength = [array sortedArrayUsingSelector:@selector(lengthCompare:)];
NString *shortestWord = [[arraySortedByStringLength objectAtIndex:0] retain];
NSLog(@"shortest word, %@ has length %d", shortestWord, [shortestWord length];
[shortestWord release];
NString *longestWord = [[arraySortedByStringLength lastObject] retain];
NSLog(@"Longest word, %@ has length %d", longestWord, [longestWord length];
[longestWord release];
Si vous ne le faites qu'une seule fois, vous pouvez également utiliser - [NSArray sortedArrayUsingComparator:], qui utilise un bloc au lieu d'un sélecteur. Vous n'avez alors pas besoin de déclarer une méthode qui ne sera appelée qu'une seule fois. –
Bonne alternative cependant les blocs sont limités à iOS4 et au-dessus. La balise – falconcreek
est [iphone]. sur Mac, des blocs ont été introduits dans le code mis à jour 10.6 (Snow Leopard) – falconcreek
Cela ressemble à un exercice de logique classique ou est-ce quelque chose qui me manque dans votre question?
int longestWordIndex = 0;
NSUInteger longestWordSize = 0;
for (int i=0 ; i<[nameArray count] ; i++) {
NSString* element = (NSString*)[nameArray objectAtindex:i];
if([element lenght] > longestWordSize) {
longestWordSize = [element lenght];
longestWordIndex = i;
}
}
NSLog("Longest word is %@ with size of :%d", [nameArray objectAtIndex:longestWordIndex], longestWordSize);
bien merci, je connais cette solution. Mais c'est une solution laïque. Si vous pouvez me dire toutes les méthodes intégrées qui sont disponibles dans Objecive C. – user12345
Oui, je le pensais. Vous pourriez probablement bousiller avec indexesOfObjectsPassingTest mais vous devrez l'appeler deux fois de toute façon. Aucune autre idée – VdesmedT
Je vais ajouter une approche aux deux ci-dessus - utiliser un bloc pour faire le corps de votre itération.
__block NSUInteger longestWordSize = -1; // Make sure at least one object will be longer.
__block NSUInteger longestWordIndex;
[nameArray enumerateObjectsUsingBlock:^(id currentWord, NSUInteger index, BOOL *stop) {
if ([currentWord length] > longestWordSize) {
longestWordSize = [currentWord length];
longestWordIndex = index;
}
}];
NSLog("Longest word is %@ with size of :%d", [nameArray objectAtIndex:longestWordIndex], longestWordSize);
Edit: Le max et l'indice doivent être de type de stockage __block
afin qu'ils puissent être modifiés à l'intérieur du bloc.
- 1. Comment comparer les valeurs dans un tableau
- 2. Comment comparer une valeur dans un tableau?
- 3. Comment imprimer un élément de tableau associatif?
- 4. comment obtenir un élément de tableau Flex
- 5. Comparer plusieurs valeurs dans un tableau Ruby
- 6. comparer chaîne à un tableau NSMutable
- 7. Comment comparer un élément XML avec une variable XSL
- 8. Comment comparer efficacement deux gros fichiers XML élément par élément?
- 9. Comparer un élément de tableau spécifique à une chaîne avec "if" dans C?
- 10. élément de date adjacent dans le tableau
- 11. Comment ajouter un élément au tableau C++?
- 12. comparer tableau des valeurs
- 13. Comment comparer un élément d'une file d'attente à un élément d'un ensemble?
- 14. comparer un tableau d'enums dans (Objectif) C
- 15. Comment remplacer un élément dans un tableau de chaînes?
- 16. comment comparer les valeurs dans un tableau en sql
- 17. dupliquer un élément de tableau php
- 18. accesseur personnalisé pour un élément de tableau
- 19. comparer chaîne en php tableau
- 20. enregistrer un élément d'un tableau à un tableau différent
- 21. Vbscript + Créer et comparer un tableau de noms d'utilisateur
- 22. Ajouter un élément à un tableau
- 23. DatagGridViewColumn.DataPropertyName à un élément de tableau?
- 24. PHP comparer tableau de deux dimensions
- 25. Comment obtenir un tableau d'index de occurences de même élément dans un tableau
- 26. Accéder à un élément de tableau dans le même tableau
- 27. Comment supprimer un élément de tableau d'un menu contextuel?
- 28. Comment supprimer un élément de tableau basé sur la clé?
- 29. Comment remplacer {tag_INDEX} par un élément de tableau [INDEX]
- 30. Comment concaténer une chaîne dans un élément de tableau PHP?
duplication possible? http://stackoverflow.com/questions/1137839/comparing-arrays-in-objective-c – Adnan
Pourriez-vous préciser: quel type de tableau (tableau de style C ou NSArray)? Rem: comparer deux éléments renvoie toujours une seule valeur (NSOrderDescending, NSOrderAscending ou NSOrderedSame). – VdesmedT
Les instances 'elements' de' NSString' ou d'une autre classe? – falconcreek