Sie könnten jeden der Zeichen der Zeichenfolge in NSArray
von NSNumber
Objekte speichern und dann sortieren. Scheint ein bisschen teuer, also würde ich vielleicht einfach qsort()
stattdessen verwenden.
Hier ist es als Objective-C-Kategorie (ungetestet) zur Verfügung gestellt:
NSString + SortExtension.h:
#import <Foundation/Foundation.h>
@interface NSString (SortExtension)
- (NSString *)sorted;
@end
NSString + SortExtension.m:
#import "NSString+SortExtension.h"
@implementation NSString (SortExtension)
- (NSString *)sorted
{
// init
NSUInteger length = [self length];
unichar *chars = (unichar *)malloc(sizeof(unichar) * length);
// extract
[self getCharacters:chars range:NSMakeRange(0, length)];
// sort (for western alphabets only)
qsort_b(chars, length, sizeof(unichar), ^(const void *l, const void *r) {
unichar left = *(unichar *)l;
unichar right = *(unichar *)r;
return (int)(left - right);
});
// recreate
NSString *sorted = [NSString stringWithCharacters:chars length:length];
// clean-up
free(chars);
return sorted;
}
@end
Ihre Methodennamen sollten sortedArrayUsingComparator sein und sortUsingComparator – tiguero
Hinweis nicht, dass mit 'substringWithRange:' wie dies bedeutet, dass dieses Verfahren nicht mit zusammengesetzten Zeichen wie 'o' arbeiten. Dies ist kein fataler Einwand, nur eine Warnung. –