使用NSArray的Objective-C中的指针数组

时间:2010-05-30 12:03:27

标签: objective-c sorting nsarray

我正在为我的iphone编写程序并且有一个问题 假设我有一个名为my_obj的类

class my_obj  
{  
  NSString  *name;  
  NSinteger  *id;  
  NSinteger  *foo;  
  NSString   *boo;  
}  

现在我从my_obj类型中分配100个对象,并将它们从NSArray类型插入到数组中 那么我想以两种不同的方式对数组进行排序。一个名字,一个名字 身份证。

我想从NSArray类型中分配另外两个数组

*arraySortByName     
*arraySortById  

如果我只想将排序的数组引用到原始数组中,我需要做什么 所以我将得到两个指向原始数组的排序数组(没有改变!)
换句话说,我不想为每个排序的数组分配另外100个对象。

2 个答案:

答案 0 :(得分:4)

您可以使用返回新数组的NSArray方法sortedArrayUsingFunction:context:(或其他NSArray排序函数)。

来自文档:

  

新数组包含对接收者元素的引用,而不是它们的副本。


如果你的意思是排序的数组应该只是指向原始数组的指针,那么它应该如何工作?排序数组中元素的顺序是不同的。

或者我没有得到你的问题。

答案 1 :(得分:2)

这很容易。检查一下:

NSSortDescriptor * sortByName = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
NSSortDescriptor * sortByID = [NSSortDescriptor sortDescriptorWithKey:@"id" ascending:YES];

NSArray * sortedByName = [original sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortByName]];
NSArray * sortedByID = [original sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortByID]];

这将创建对象的副本。因此,您仍然只有100个已分配的my_obj个对象。