【问题标题】:Objective-c Sorting NSArray with alphanumeric strings in correct order [duplicate]Objective-c使用正确顺序的字母数字字符串对NSArray进行排序[重复]
【发布时间】:2017-03-29 14:33:04
【问题描述】:

我有一个包含数字的字符串数组,即Shift 1 RT9909 我对数组进行如下排序:

NSSet *forms = dataObject.rtForms;

NSSortDescriptor *nameDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"type" ascending:YES];
NSArray *sorted = [forms sortedArrayUsingDescriptors:[NSArray arrayWithObject:nameDescriptor]];

当元素数量低于 10 时,这可以正常工作。此后,Shift 10 RT9909 被放在前面 Shift 2 RT9909

所以我的问题是如何对数组进行排序,以便 Shift 10 RT9909 跟随 Shift 9 RT9909

【问题讨论】:

  • 您必须将字符串解析为值并按这些值排序。没有其他办法了。或者在您的字符串中添加前导零。
  • NSArray *sorted = [forms sortedArrayUsingComparator:^NSComparisonResult(rtFormClass _Nonnull form1, rtFormClass * _Nonnull form2) { return [form1.type compare:form2.type options:NSNumericSearch];?使用NSNumericSearch 进行比较。

标签: ios objective-c arrays sorting


【解决方案1】:

Larme 建议您需要将ComparatorNSNumericSearch 结合使用,您也可以与NSSortDescriptor 结合使用

NSSortDescriptor *nameDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"type" ascending:YES comparator:^NSComparisonResult(id obj1, id obj2) {
    return [(NSString *)obj1 compare:(NSString *)obj2 options:NSNumericSearch];
}];
NSArray *sortedArray = [anArray sortedArrayUsingDescriptors:[NSArray arrayWithObject:nameDescriptor]];

【讨论】:

  • 完美,很享受。谢谢
  • @jampez77 欢迎朋友 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-14
  • 2013-02-03
  • 1970-01-01
  • 1970-01-01
  • 2018-04-21
  • 1970-01-01
  • 2015-09-03
相关资源
最近更新 更多