在Objective-C中对数组进行排序

我目前正在尝试自学Objective-C并且正在玩一个我需要对数组进行排序的练习。

我设法使用以下代码完成它:

NSSortDescriptor * newSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"title" ascending:TRUE]; NSArray *sortDescriptors = [NSArray arrayWithObject:newSortDescriptor]; [self.theBookStore sortUsingDescriptors:sortDescriptors]; 

我的问题是这里发生了什么。 我真的不明白我做了什么。

第1行:我在这里理解我已经创建了一个具有描述符的新对象。 这有两个参数,我要排序的列,它是升序。

第2行:这是我很困惑的一句话。 为什么我需要一组排序描述符? 当我读到这段代码时,我怀疑它创建的数组中只有一行是正确的吗?

第3行:我知道这是在调用sortUsingDescriptors方法,但是再一次,我的困惑是为什么这个函数需要一个数组。

我已经阅读了文档,但我真的在寻找一个简单的解释。

任何帮助深表感谢

  • 第1行:..是的,你的权利。 您正在创建名为NSSortDescriptor的自定义对象。 该对象定义了要排序的属性。 你确实输入了“标题”。 因此,数组到排序中的对象将在该属性之后进行排序(yourObject.title“kind-of”)。

  • 第2行:因为排序方法( sortUsingDescriptors )总是需要一个数组,所以需要创建一个只有一个对象的NSArray。 好吧,……看起来有点愚蠢。 但绝对有道理。 让我们说你想按两个标准排序(让我们说“标题”,然后“城市”)。

  • 第3行:是的,因为按照一个以上的标准排序,所以必须是一个数组。

并始终保持内存清洁:在第1行,您确实分配/初始化NSSortDescriptor。 使用后清理(如果你不使用ARC )。 所以添加一行:

 [newSortDescriptor release]; 

第1行:我在这里理解我已经创建了一个具有描述符的新对象。 这有两个参数,我要排序的列,它是升序。

实际上,您已经创建了一个描述符对象。 它描述了如何对数组进行排序。

第2行:这是我很困惑的一句话。 为什么我需要一组排序描述符? 当我读到这段代码时,我怀疑它创建的数组中只有一行是正确的吗?

右 – 您创建了一个包含单个对象的数组。 如果你真的想要对那么多字段进行排序,你可以创建一个包含十个或十五个或八十七个排序描述符的数组。 更常见的是,你使用一,二,三个。 因此,如果您要对人员列表进行排序,则可以添加指定姓氏和名字的排序描述符。 这样,具有相同姓氏的人将根据他们的名字安排在该组中。

第3行:我知道这是在调用sortUsingDescriptors方法,但是再一次,我的困惑是为什么这个函数需要一个数组。

同样,它可以使您拥有主要,次要,第三(等)排序键。 当您只想对一个键进行排序时,您可以使用单独的方法来获取单个排序描述符而不是数组。 NSArray不提供,但如果您愿意,您可以随时将其添加到类别中:

 @category NSArray (SingleSortDescriptor) - (NSArray*)sortUsingDescriptor:(NSSortDescriptor*)descriptor; @end @implementation NSArray (SingleSortDescriptor) - (NSArray*)sortUsingDescriptor:(NSSortDescriptor*)descriptor { return [self sortUsingDescriptors:[NSArray arrayWithObject:descriptor]]; } @end 

如果存在多个匹配项,将使用多个排序描述符来解决发生的情况。 我是优先订单。 如果第二个描述符找到两个相同的标题,它将告诉它该怎么做。