Bạn có thể lưu trữ từng ký tự của chuỗi thành một đối tượng NSArray
của NSNumber
và sau đó sắp xếp các ký tự đó. Có vẻ hơi đắt tiền, vì vậy tôi có lẽ chỉ cần sử dụng qsort()
thay thế.
Ở đây nó được cung cấp như là một thể loại Objective-C (chưa được kiểm tra):
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
tên phương pháp của bạn nên được sortedArrayUsingComparator và không sortUsingComparator – tiguero
Lưu ý rằng sử dụng 'substringWithRange:' như thế này có nghĩa là thủ tục này sẽ không làm việc với các nhân vật bao gồm như 'O'. Đây không phải là một phản đối gây tử vong, chỉ là một lời cảnh báo. –