NSSortDescriptor 没有对我的 NSMutableArray 进行排序?
Posted
技术标签:
【中文标题】NSSortDescriptor 没有对我的 NSMutableArray 进行排序?【英文标题】:NSSortDescriptor not sorting my NSMutableArray? 【发布时间】:2013-09-05 00:20:16 【问题描述】:我有一个包含 NSDictionaries 的 NSMutableArray。我发现了一个关于 SO 的问题,并且正在使用此代码对这个 NSMutableArray 进行排序:
NSMutableArray
data =
etc... (for length)
;
number = 1;
,
data =
etc... (for length)
;
number = 3;
,
data =
etc... (for length)
;
number = 4;
,
data =
etc... (for length)
;
number = 2;
此数组最多可包含 80 个子字典。
NSSortDescriptor
NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"number" ascending:YES];
[NSMUTABLEARRAYVAR sortedArrayUsingDescriptors:[NSArray arrayWithObjects:descriptor,nil]];
NSMutableArray *test;
test = [NSMUTABLEARRAYVAR copy];
当我 NSLog “测试”时,我得到与 NSMUTABLEARRAYVAR 相同的顺序???
如果能帮我解决这个问题,我将不胜感激,谢谢!
【问题讨论】:
How should I fix this code?的可能重复 【参考方案1】:sortedArrayUsingDescriptors
不对数组进行就地排序。它返回一个新排序的数组。
sortUsingDescriptors
进行就地排序。
【讨论】:
这行得通!除了我发现了一个问题 - 它是 1、10、11、12,然后在每个以 9 结尾的两位数上,它都会回到单个 - 1、10、11、12、13、14、15、16、17, 18,19,2,20,21,22,23,24,25,26,27,28,29,3,30 等...有什么想法吗? “数字”属性被排序为字符串。如果他们是NSString
,你能改变你的字典把他们存储为NSNumber
吗?否则,我认为您将需要一个比较器或选择器来对字符串进行排序,就好像它们是数字一样。
您的排序需要基于localizedStandardCompare:
- 这将让我们说 10 在 9 之后而不是在 1 之后以上是关于NSSortDescriptor 没有对我的 NSMutableArray 进行排序?的主要内容,如果未能解决你的问题,请参考以下文章
NSSortDescriptor 错误:“[NSSortDescriptor 计数]:无法识别的选择器发送到实例”
使用 NSSortDescriptor 按时间错误排序(带有核心数据)
NSSortDescriptor 生成 ORDER BY `name` = 'bob' DESC?
NSSortDescriptor 对核心数据获取请求没有影响