Objective c NSMutable数组排序1后的10
我有一个播放列表,里面有我喜欢排序的数字,在我的数字达到10之前一切都很好。数组在1之后排序10,而不是9,我如何修复它 这是我的密码: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
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];