簡體   English   中英

如何將NSString轉換為數字

[英]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鏈接到良好的質量檢查:

如何按字母順序對NSArray進行排序?

在您的情況下,我可以想到的最后一種方法是。 那將使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM