2 つの情報を含む連結文字列があります。文字列の最後の 3 文字は数字です。配列にはこれらが約10個あり、最小のインデックスに最大数の文字列を配置して配列をソートしたいと考えています。
このような配列を (最後の 3 文字の整数値で) 並べ替えるにはどうすればよいですか?
2 つの情報を含む連結文字列があります。文字列の最後の 3 文字は数字です。配列にはこれらが約10個あり、最小のインデックスに最大数の文字列を配置して配列をソートしたいと考えています。
このような配列を (最後の 3 文字の整数値で) 並べ替えるにはどうすればよいですか?
文字列オブジェクトの最後の 3 文字で配列をソートする組み込み関数はありません。具体的すぎるためです。しかし、当面の問題はいつでも分解できます。
まず、配列をソートする方法です。たとえば、ここで説明されているように、それを行うには多くの方法があります: How to sort an NSMutableArray with custom objects in it?
ブロックを使用している最後の光沢のあるオプションに進むとしましょう。
ここで、特定のケースの 2 番目の問題は、文字列から最後の 3 文字を取得する必要があることです。それを行う方法の例は、ここから取得できます: how to capture the last 4 characters from NSString
すべてを一緒に入れて:
NSArray *sortedArray = [array sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
NSString *first = [(NSString*)a substringFromIndex:[a length]-3];
NSString *second = [(NSString*)b substringFromIndex:[b length]-3];
return [second compare:first];
}];
次のようなものを試すことができます: (このコードはテストされていません)
NSArray *unorderedArray; //This is your array
NSArray *orderedArray = [unorderedArray sortedArrayUsingComparator: ^(id obj1, id obj2) {
NSString *string1 = [(NSString *)obj1;
NSString *string2 = (NSString *)obj2;
string1 = [string1 substringFromIndex:[string1 length] - 3]; //3 last chars
string2 = [string2 substringFromIndex:[string2 length] - 3]; //3 last chars
return [string2 compare:string1];
}];