如何在objective-c中以自定义方式对包含数字和字符的字符串数组进行排序?

Mar*_*wan 2 arrays sorting objective-c uitableview ios

如何对包含数字和字符的字符串数组进行排序?我的tableView中包含以下数据:

    - (void)viewDidLoad {
[super viewDidLoad];

self.tableData = [NSMutableArray array];

[self.tableData addObject:@"28 days"];
[self.tableData addObject:@"29 weeks"];
[self.tableData addObject:@"3 days"];
[self.tableData addObject:@"10 years"];
[self.tableData addObject:@"4 months"];
[self.tableData addObject:@"3 Weeks"];
[self.tableData addObject:@"27 Years"];
[self.tableData addObject:@"1 months"]; 
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"Sort" style:UIBarButtonItemStyleBordered target:self action:@selector(sort)];}
Run Code Online (Sandbox Code Playgroud)

我希望以"自然"的方式对其进行排序,其中的日子是第一天,然后是几周,几个月等,同时2天是在5天之前等等.这可能吗?或者我必须创建数周,数月,数年等单独的数组?

这是我使用的代码:

- (void)sort {

NSSortDescriptor *sorter = [[NSSortDescriptor alloc]initWithKey:nil ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)];
NSArray *sortArray = [NSArray arrayWithObject:sorter];
NSArray *sortedArray = [self.tableData sortedArrayUsingDescriptors:sortArray];
[self.tableData removeAllObjects];
[self.tableData addObjectsFromArray:sortedArray];
[self.tableView reloadData];}
Run Code Online (Sandbox Code Playgroud)

这并不能解决数值问题,甚至不能以正确的方式对数据进行排序^^

Wai*_*ain 5

如果您创建了一个自定义类来保存字符串而不是将它们直接放入数组中,这将有所帮助.然后,除了保存字符串之外,此自定义类还可以保留持续时间的数值.此数值可用于轻松排序,也可在以后用户选择和用户选择的使用时为您提供帮助.

或者,您可以使用其中一种排序方法,sortedArrayUsingComparator:并提供代码来检查字符串中的文本和数字内容,并计算出顺序(这不是那么容易).