Objective c 将NSString中的字符按字母顺序排序

Objective c 将NSString中的字符按字母顺序排序,objective-c,nsstring,Objective C,Nsstring,我正试着把单词按字母顺序重新排列。例如,西红柿会变成amoott,或者stack会变成ackst 我发现了一些在C语言中使用字符数组来实现这一点的方法,但是在NSString对象的范围内实现这一点时遇到了一些问题 在NSString对象本身中有没有更简单的方法呢?您可以将字符串的每个字符存储到NSNumber对象的NSArray中,然后对其进行排序。似乎有点贵,所以我可能只使用qsort() 此处作为Objective-C类别提供(未经测试): NSString+SortExtension.h:

我正试着把单词按字母顺序重新排列。例如,西红柿会变成amoott,或者stack会变成ackst

我发现了一些在C语言中使用字符数组来实现这一点的方法,但是在NSString对象的范围内实现这一点时遇到了一些问题


在NSString对象本身中有没有更简单的方法呢?

您可以将字符串的每个字符存储到
NSNumber
对象的
NSArray
中,然后对其进行排序。似乎有点贵,所以我可能只使用
qsort()

此处作为Objective-C类别提供(未经测试):

NSString+SortExtension.h:

#import <Foundation/Foundation.h>

@interface NSString (SortExtension)
- (NSString *)sorted;
@end

我认为应该将字符串分隔为字符串数组(数组中的每个字符串只包含原始字符串中的一个字符)。然后对数组进行排序就可以了。这不是很有效,但当字符串不是很长时就足够了。我已经测试了代码

NSString *str = @"stack";
NSMutableArray *charArray = [NSMutableArray arrayWithCapacity:str.length];
for (int i=0; i<str.length; ++i) {
    NSString *charStr = [str substringWithRange:NSMakeRange(i, 1)];
    [charArray addObject:charStr];
}

NSString *sortedStr = [[charArray sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)] componentsJoinedByString:@""];
NSString*str=@“stack”;
NSMutableArray*charArray=[NSMutableArray阵列容量:str.length];
for(int i=0;i
/-----------函数从字符串生成数组
NSArray*makeArrayFromString(NSString*my_字符串){
NSMUTABLEARRY*array=[[NSMUTABLEARRY alloc]init];
for(int i=0;i
只是使用
NSMutableString
sortUsingComparator:

NSMutableString *mutableString = [[NSMutableString alloc] initWithString:@"tomat"];
[mutableString appendString:@"o"];
NSLog(@"Orignal string: %@", mutableString);

NSMutableArray *charArray = [NSMutableArray array];
for (int i = 0; i < mutableString.length; ++i) {
    [charArray addObject:[NSNumber numberWithChar:[mutableString characterAtIndex:i]]];
}

[charArray sortUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
    if ([obj1 charValue] < [obj2 charValue]) return NSOrderedAscending;
    return NSOrderedDescending;
}];

[mutableString setString:@""];
for (int i = 0; i < charArray.count; ++i) {
    [mutableString appendFormat:@"%c", [charArray[i] charValue]];
}

NSLog(@"Sorted string: %@", mutableString);

您的方法名称应该使用Comparator进行排序,而不是SortusingComparator。请注意,像这样使用
substringWithRange:
意味着此过程将无法处理组合字符,如
o.
。这不是致命的问题,只是一个警告。
// --------- Function To Make an Array from String
NSArray *makeArrayFromString(NSString *my_string) {
    NSMutableArray *array = [[NSMutableArray alloc] init];
    for (int i = 0; i < my_string.length; i ++) {
        [array addObject:[NSString stringWithFormat:@"%c", [my_string characterAtIndex:i]]];
    }
    return array;

}

// --------- Function To Sort Array
NSArray *sortArrayAlphabetically(NSArray *my_array) {
    my_array= [my_array sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
    return my_array;
}

// --------- Function Combine Array To Single String
NSString *combineArrayIntoString(NSArray *my_array) {
    NSString * combinedString = [[my_array valueForKey:@"description"] componentsJoinedByString:@""];
    return combinedString;
}




// Now you can call the functions as in below where string_to_arrange is your string
    NSArray *blowUpArray;
    blowUpArray = makeArrayFromString(string_to_arrange);
    blowUpArray = sortArrayAlphabetically(blowUpArray);
    NSString *arrayToString= combineArrayIntoString(blowUpArray);
    NSLog(@"arranged string = %@",arrayToString);
NSMutableString *mutableString = [[NSMutableString alloc] initWithString:@"tomat"];
[mutableString appendString:@"o"];
NSLog(@"Orignal string: %@", mutableString);

NSMutableArray *charArray = [NSMutableArray array];
for (int i = 0; i < mutableString.length; ++i) {
    [charArray addObject:[NSNumber numberWithChar:[mutableString characterAtIndex:i]]];
}

[charArray sortUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
    if ([obj1 charValue] < [obj2 charValue]) return NSOrderedAscending;
    return NSOrderedDescending;
}];

[mutableString setString:@""];
for (int i = 0; i < charArray.count; ++i) {
    [mutableString appendFormat:@"%c", [charArray[i] charValue]];
}

NSLog(@"Sorted string: %@", mutableString);
Orignal string: tomato
Sorted string: amoott