可可 - 数组不排序?

Posted

技术标签:

【中文标题】可可 - 数组不排序?【英文标题】:Cocoa - array not sorting? 【发布时间】:2010-03-17 14:46:27 【问题描述】:

我有这套

NSMutableSet *mySet = [NSMutableSet setWithObjects: @"2", @"8", @"7", @"0", @"3", nil];

我将集合复制到一个数组并使用它进行排序

NSArray *sortedArray = [[mySet allObjects] sortedArrayUsingSelector:@selector(compare:)];

结果数组与集合的顺序完全相同,并且没有被排序。为什么?

感谢您的帮助。

编辑:更正一个错字。

【问题讨论】:

复制粘贴了您的代码 - 没问题... 不在我的代码中。奇怪的是,在我的代码中,sortedArray 有一个对象,而不是 5...这就像数组被存储在 sortedArray 的单个条目上...数组中的一种数组...非常奇怪... 我想通了。谢谢。检索原始集时出错。现在它工作正常。感谢你们给我的所有帮助! 【参考方案1】:

我这样粘贴并运行你的代码:

NSMutableSet *mySet = [NSMutableSet setWithObjects: @"2", @"8", @"7", @"0", @"3", nil];
NSLog(@"mySet=%@",mySet);
NSArray *sortedArray = [[mySet allObjects] sortedArrayUsingSelector:@selector(compare:)];
NSLog(@"sortedArray=%@",sortedArray);

哪些输出:

2010-03-17 11:06:27.982 iPhoneTestBed[41907:207] mySet=(
    0,
    2,
    7,
    8,
    3
)
2010-03-17 11:06:27.984 iPhoneTestBed[41907:207] sortedArray=(
    0,
    2,
    3,
    7,
    8
)

我认为您的问题在于您对排序数组的日志记录。也许您不小心记录了集合而不是数组。我曾经这样做浪费了半天时间。

【讨论】:

【参考方案2】:

嗯,排序正确,一旦我将集合构造更正为

NSMutableSet *mySet = [NSMutableSet setWithObjects: @"2", @"8", @"7", @"0", @"3", nil];

记住,"abc" 是一个char*,这是一个基本类型,你在 Objective-C 中很少使用,你不能把它放在NSArray 中。 @"abc"NSString,它是一个对象。

【讨论】:

很抱歉。这是我在这里的代码中的错字。我的代码有 @... 并且没有排序。 不能mySet或任何其他集合进行排序。他在对 TechZen 回答的评论中说,事实上,他确实记录了集合而不是排序数组。

以上是关于可可 - 数组不排序?的主要内容,如果未能解决你的问题,请参考以下文章

JS数组排序,有些位置不懂,帮忙注释哈。为啥从小到大排序?

数组排序是啥?

数组排序相关

如何在不改变原始数组的情况下对数组进行排序?

排序算法入门之快速排序(java实现)

iosOC/C不可变数组排序