2012-03-15 8 views
0

J'écris une petite application pour l'iphone et j'essaye d'écrire une fonction qui insérera un NSMutableString dans un NSArray dans l'ordre alphabétique. J'écrirai aussi un tri pour trier tout le tableau. Dans les deux cas, je me demande quelle est la meilleure façon de comparer NSMutableStrings. Y a-t-il une fonction spécifique que je peux utiliser?Comparer des chaînes dans Objective-C

Merci pour votre aide.

+0

Est-ce que vous voulez faire une sorte d'une fois ou trier tout en insérant? – ThomasW

+0

Un autre problème est que vous ne pouvez pas insérer dans un 'NSArray', vous avez besoin d'un' NSMutableArray'. – ThomasW

+0

bon point, merci. – Jonathan

Répondre

4

Je pense que vous cherchez

(NSComparisonResult)[aString compare: bString]; 

https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/nsstring_Class/Reference/NSString.html#//apple_ref/occ/instm/NSString/compare:

Vous pouvez utiliser ce ou l'une des méthodes connexes si vous faites le tri par insertion. Toutefois, si vous souhaitez effectuer un tri ponctuel de NSMutableArray, vous pouvez utiliser l'une des méthodes de tri NSMutableArray, telles que sortUsingComparator:.

https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSMutableArray_Class/Reference/Reference.html#//apple_ref/occ/instm/NSMutableArray/sortUsingComparator:

1

essayer BOOL ans = [str1 isEqualToString:str2];

+0

C'est à peu près la seule fonction de comparaison de chaînes que je connais. le seul problème est que j'ai besoin de savoir quelle chaîne est la plus grande dans le cas où ils ne sont pas égaux. – Jonathan

+0

Quelle chaîne est ** plus grande **? Qu'entendez-vous par plus grand? – Raptor

1

Essayez la méthode de sortedArrayUsingSelector:NSArray:

NSArray * stringArray = [NSArray arrayWithObjects:@"dddsss", @"aada", @"bbb", nil]; 
[stringArray sortedArrayUsingSelector:@selector(compare:)]; 
NSLog(@"%@", [stringArray sortedArrayUsingSelector:@selector(compare:)]); 

eteint:

(
    aada, 
    bbb, 
    dddsss 
) 

De plus, vous pouvez utiliser NSSortDescriptor décider ASC ou de l'ordre de DESC.

2

Si vous regardez sous "Identifying and comparing strings" in the NSString reference, vous trouverez plusieurs options. Ils font des choses légèrement différentes, puisque vous pourriez vouloir comparer les chaînes de différentes manières (par exemple, les nombres sont-ils comparés dans l'ordre lexical ou numérique?). Le plus fondamental est compare: - vous pouvez probablement commencer là et choisir une version plus compliquée au besoin.

2

Je pense que cela devrait fonctionner pour vous. Voici ma réponse que j'ai pris à partir du lien:

Comparing text in UITextView?

SOLUTION-1: Je l'ai modifié ici un peu pour le rendre plus facile pour votre cas:

Supposons String1 est un NSString.

//Though this is a case sensitive comparison of string 
BOOL boolVal = [String1 isEqualToString:@"My Default Text"]; 

//Here is how you can do case insensitive comparison of string: 
NSComparisonResult boolVal = [String1 compare:@"My Default Text" options:NSCaseInsensitiveSearch]; 

if(boolVal == NSOrderedSame) 
{ 
    NSLog(@"Strings are same"); 
} 
else 
{ 
    NSLog(@"Strings are Different"); 
} 

ici si boolval est NSOrderedSame alors vous pouvez dire que les chaînes sont même bien ils sont différents.

SOLUTION-2: Aussi, vous ne trouvez pas ce facile, vous pouvez vous référer à la réponse de Macmade sous le même lien.

J'espère que cela vous aide.

2

pour le tableau de tri

NSArray *sortedArray = [anArray sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];