NSMutable数组排序10后1

时间:2017-05-08 03:17:12

标签: objective-c arrays sorting

我有一个带有我想要排序的数字的播放列表的数组,一切都很好,直到我的数字达到10.数组排序10后1而不是9,我该如何解决?

这是我的代码:

NSArray *sortedArray = [NSArray arrayWithArray:playlists];
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
playlists = (NSMutableArray*)[sortedArray sortedArrayUsingDescriptors:@[sort]];
playlists = [meshGroups mutableCopy];

修改

这里我改变了以便数组在9之后排序10而不是在1之后:

我改变了

NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];

NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES comparator:^NSComparisonResult(id obj1, id obj2) {
    return [(NSString*) obj1 compare:(NSString*) obj2 options:NSNumericSearch];
}];

2 个答案:

答案 0 :(得分:2)

你有两个明显的问题,只有一个是排序。

首先,当10正在执行词典("字母"但扩展到所有字符)时,NSSortDescriptor出现在错误的位置一个以1开头的字符串出现在以2等开头的

之前

要解决此问题,您需要进行比较,按字符串数字对字符串中的数字进行排序。指定了NSString选项的compare:options: NSNumericSearch方法会执行此操作。

使用带有比较器NSArrayNSSortDescriptor方法之一,即块中的块,参数和调用compare:options:。有关详细信息,请参阅NSStringNSArrayNSSortDescriptor等文档。

你写的第二个:

playlists = (NSMutableArray*)[sortedArray...

无法只是将NSArray转换为NSMutableArray以使其变为可变。使用mutableCopy执行此操作,就像在下一行中一样:

playlists = [meshGroups mutableCopy];

会立即丢弃刚刚生成的已排序数组...

HTH

答案 1 :(得分:-2)

您可以使用

- (NSArray<ObjectType> *)sortedArrayUsingComparator:(NSComparator)cmptr

API并在 cmptr block 中编写自己的比较逻辑

这是我所知道的最简单,最可靠的方法,可以实现您想要的输出。 希望它有所帮助。