我正在为我的iphone编写程序并且有一个问题 假设我有一个名为my_obj的类
class my_obj
{
NSString *name;
NSinteger *id;
NSinteger *foo;
NSString *boo;
}
现在我从my_obj类型中分配100个对象,并将它们从NSArray类型插入到数组中 那么我想以两种不同的方式对数组进行排序。一个名字,一个名字 身份证。
我想从NSArray类型中分配另外两个数组
*arraySortByName
*arraySortById
如果我只想将排序的数组引用到原始数组中,我需要做什么
所以我将得到两个指向原始数组的排序数组(没有改变!)
换句话说,我不想为每个排序的数组分配另外100个对象。
答案 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
个对象。