0

「_」の後の番号に従ってファイルのリストをソートする必要があります。

"filename_1" "filename_2" ......

番号を抽出してファイル名を番号でソートできることは知っていますが、不正な名前が存在し、プログラムが長くなった場合はどうするかを検討する必要があります。

私がやりたいことは、文字列全体を単純に比較することです。同じ文字には同じ番号が必要です。しかし、[@"word" intValue] を実行すると、文字列が数値でない場合、結果はゼロになります。文字列を数値に変換する良い方法があるか知りたいです。

4

5 に答える 5

2

NSStringの方法を見てください。

- (NSComparisonResult)compare:(NSString *)aString options:(NSStringCompareOptions)mask

NSNumericSearchオプション。

于 2012-06-28T05:32:40.443 に答える
1

自分で並べ替えたい場合は、

- (NSComparisonResult)compare:(NSString *)aString;

ルーティーン。

NSComparisonResult 対応出力への参照は次のとおりです。

These constants are used to indicate how items in a request are ordered.

enum {
    NSOrderedAscending = -1,
    NSOrderedSame,
    NSOrderedDescending
};
typedef NSInteger NSComparisonResult;

定数: NSOrderedAscending 左オペランドが右オペランドより小さい。

NSOrderedSame 2 つのオペランドが等しい。

NSOrderedDescending 左オペランドが右オペランドより大きい。

簡単だと思う場合は、分離された文字列で NSArray を埋めることができます。次に、次のようなものを使用します。

sortedArray = [anArray sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];

SO からの適切な QA へのリンク:

NSArray をアルファベット順にソートする方法は?

あなたの場合、私が考えることができる最後の方法が1つあります。それは、NSString の hasPrefix メソッドを使用して、最初の検証として各文字列が「filename_」で始まることを確認することです。その後、「filename_」の後に残りの文字列を取得するだけで、文字列全体をサブストリング化します。すべてのファイル名に 1 以上の数字が含まれる場合、0 はその時点で文字列が無効であることを意味します。そうでない場合、intValue は有効な正の整数を返す必要があり、整数値で並べ替えることができます。

于 2012-06-28T05:38:44.683 に答える
0

これはうまくいくはずです:

NSString *good = @"filename_1";
NSString *bad = @"filename";

NSCharacterSet *letterSet= [NSCharacterSet letterCharacterSet];

good = [good stringyByTrimmingCharactersInSet:letterSet]; // 1
bad = [bad stringByTrimmingCharactersInSet:letterSet]; // <empty>
于 2012-06-28T05:34:28.120 に答える
0

次の coe を使用して、ファイル オブジェクトのリストを含む配列を並べ替えることができます。

NSSortDescriptor *aSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"fileName" ascending:YES];
[arrayOfFileNames sortUsingDescriptors:[NSArray arrayWithObject:aSortDescriptor]];

これがお役に立てば幸いです...

于 2012-06-28T05:35:21.120 に答える
0

NSString は 1,10,11,12,13,14 .....2,20,21,22 ......このタイプの昇順に従い、整数は次のようになるため、NSString と比較することはできないと思います0,1,2,3,4,5,6,7....... など ..... したがって、文字列から最後の文字を分割する必要があり、比較する必要があります。

昇順で文字列を短くする方法....

NSMutableArray *array = [NSMutableArray arrayWithObjects:@"f_1",@"f_2",@"f_12",@"f_6",@"f_9",@"f_4", nil];
 NSSortDescriptor *name = [[[NSSortDescriptor alloc] initWithKey:@"" ascending:YES] init];
[array sortUsingDescriptors:[NSMutableArray arrayWithObjects:name, nil]];

ただし、これにより、数に応じて文字列がショートすることはありません。

ありがとう!

于 2012-06-28T05:40:20.283 に答える