[英]How to turn NSString to a number
我需要根據“ _”之后的數字對文件列表進行排序:
"filename_1" "filename_2" ......
我知道我可以提取數字,然后用數字對文件名進行排序,但是我必須考慮如果存在一些非法名稱並且程序變長了該怎么辦。
我想做的就是簡單地比較整個String,相同的char必須具有相同的數字。 但是當我執行[@“ word” intValue]時,如果字符串不是數字,則結果為零。 我想知道是否有一種很好的方法可以將String轉換為數字。
看一下NSString
的方法:
- (NSComparisonResult)compare:(NSString *)aString options:(NSStringCompareOptions)mask
和NSNumericSearch
選項。
如果您希望自己對它們進行排序,則需要使用
- (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兩個操作數相等。
NSOrderedDescending左操作數大於右操作數。
如果您認為更簡單,則可以用分隔的字符串填充NSArray,然后使用類似以下的內容:
sortedArray = [anArray sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
從SO鏈接到良好的質量檢查:
在您的情況下,我可以想到的最后一種方法是。 那將使用NSString的hasPrefix方法來確保每個字符串都以“ filename_”開頭作為第一次驗證。 之后,將整個字符串的子字符串作為子字符串,僅將“ filename_”之后的其余字符串作為字符串。 如果所有文件名的數字都為1或更大,則0表示此時字符串無效,否則intValue應該返回有效的正整數,您可以通過整數值進行排序。
這應該工作:
NSString *good = @"filename_1";
NSString *bad = @"filename";
NSCharacterSet *letterSet= [NSCharacterSet letterCharacterSet];
good = [good stringyByTrimmingCharactersInSet:letterSet]; // 1
bad = [bad stringByTrimmingCharactersInSet:letterSet]; // <empty>
您可以使用以下代碼對包含文件對象列表的數組進行排序:
NSSortDescriptor *aSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"fileName" ascending:YES];
[arrayOfFileNames sortUsingDescriptors:[NSArray arrayWithObject:aSortDescriptor]];
希望這對您有幫助...
我認為您無法將其與NSString進行比較,因為NSString遵循1,10,11,12,13,14 ..... 2,20,21,22 ......這種類型的升序,而整數遵循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]];
但這會使您不按數字進行字符串短路。
謝謝!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.