アルファベット順に並べ替えることを試みています。例えば、トマトが甘くなるか、スタックが早くなる。NSStringの文字をアルファベット順にソート
私はCでchar配列を使ってこれを行ういくつかのメソッドを見つけましたが、NSStringオブジェクトの範囲内で動作するようになっています。
NSStringオブジェクト自体の中で簡単な方法がありますか?
アルファベット順に並べ替えることを試みています。例えば、トマトが甘くなるか、スタックが早くなる。NSStringの文字をアルファベット順にソート
私はCでchar配列を使ってこれを行ういくつかのメソッドを見つけましたが、NSStringオブジェクトの範囲内で動作するようになっています。
NSStringオブジェクト自体の中で簡単な方法がありますか?
は、私は別のだと思います文字列の配列への文字列(配列の各文字列には、元の文字列の文字が1つだけ含まれます)。並べ替えると配列はOKになります。これは効率的ではありませんが、文字列がそれほど長くない場合は十分です。私はコードをテストしました。
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:@""];
各文字列の文字をNSArray
のNSNumber
個のオブジェクトに格納して並べ替えることができます。ちょっと高価だと思われますので、代わりにqsort()
を使用してください。
ここでは、Objective-Cのカテゴリ(未テスト)として提供されます:
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
// --------- 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);
あなたのメソッド名は 'substringWithRangeを使用することsortedArrayUsingComparatorなくsortUsingComparator – tiguero
注意する必要があります:'このように、この手順はo̶' 'のような構成文字では動作しないことを意味します。これは致命的な異論ではなく、ただの警告です。 –