Objective c NSMutable数组排序1后的10

Objective c NSMutable数组排序1后的10,objective-c,arrays,sorting,Objective C,Arrays,Sorting,我有一个播放列表,里面有我喜欢排序的数字,在我的数字达到10之前一切都很好。数组在1之后排序10,而不是9,我如何修复它 这是我的密码: NSArray *sortedArray = [NSArray arrayWithArray:playlists]; NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]; playlists = (NSMutableArray*)[sor

我有一个播放列表,里面有我喜欢排序的数字,在我的数字达到10之前一切都很好。数组在1之后排序10,而不是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];


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

首先,您的
10
出现在错误的位置,因为您的
NSSortDescriptor
正在进行词典(“字母顺序”但扩展到所有字符)排序,并且以
1
开头的字符串位于以
2
开头的字符串之前,以此类推

要解决这个问题,您需要进行比较,根据数字值对字符串中的数字进行排序
NSString
比较:选项:
方法和指定的
NSNumericSearch
选项将执行此操作

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

第二,你写:

不能简单地将
NSArray
强制转换为
NSMutableArray
以使其可变。使用
mutableCopy
执行此操作,就像您在下一行中所做的那样:

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


HTH

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

首先,您的
10
出现在错误的位置,因为您的
NSSortDescriptor
正在进行词典(“字母顺序”但扩展到所有字符)排序,并且以
1
开头的字符串位于以
2
开头的字符串之前,以此类推

要解决这个问题,您需要进行比较,根据数字值对字符串中的数字进行排序
NSString
比较:选项:
方法和指定的
NSNumericSearch
选项将执行此操作

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

第二,你写:

不能简单地将
NSArray
强制转换为
NSMutableArray
以使其可变。使用
mutableCopy
执行此操作,就像您在下一行中所做的那样:

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

HTH

您可以使用

-(NSArray*)使用比较器进行分拣:(NSComparator)cmptr

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

这是我所知道的实现您期望的输出的最简单、最可靠的方法。 希望有帮助。

您可以使用

-(NSArray*)使用比较器进行分拣:(NSComparator)cmptr

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

这是我所知道的实现您期望的输出的最简单、最可靠的方法。
希望能有所帮助。

谢谢,这篇文章提供了很多信息。我会做些改变的,汉克斯,真的很有用。我会做些改变我现在就要做了,我想我会是一个更好的方法,你可以尝试使用Selector进行SorterDarray,虽然我更喜欢blocks,所以我回答了blocks。如果答案能解决问题,帮助将来寻求答案的人,那么一定要接受答案。为什么是否决票,是谁做的。我的回答对这个问题没有帮助吗?我现在正要回答这个问题,我想我可能是一个更好的方法,你可以尝试使用Selector进行SorterDarray,尽管我更喜欢blocks,所以我回答了带有blocks的方法。如果答案能解决问题,帮助将来寻求答案的人,那么一定要接受答案。为什么是否决票,是谁做的。我的回答对案件没有帮助吗?
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES comparator:^NSComparisonResult(id obj1, id obj2) {
    return [(NSString*) obj1 compare:(NSString*) obj2 options:NSNumericSearch];
}];
playlists = (NSMutableArray*)[sortedArray...
playlists = [meshGroups mutableCopy];