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

使用NSArray的Objective-C中的指针数组,objective-c,sorting,nsarray,Objective C,Sorting,Nsarray,我正在为我的iphone编写程序,并且有一个qestion。 假设我有一个名为my_obj的类 class my_obj { NSString *name; NSinteger *id; NSinteger *foo; NSString *boo; } 现在,我从my_obj类型分配100个对象,并从NSArray类型将它们插入数组。 然后我想用两种不同的方式对数组进行排序。一个是名字,第二个是 身份证 我想从NSArray类型中再分配两个

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

class my_obj  
{  
  NSString  *name;  
  NSinteger  *id;  
  NSinteger  *foo;  
  NSString   *boo;  
}  
现在,我从my_obj类型分配100个对象,并从NSArray类型将它们插入数组。
然后我想用两种不同的方式对数组进行排序。一个是名字,第二个是
身份证

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

*arraySortByName     
*arraySortById  
如果我只想将排序后的数组引用到原始数组,我需要做什么
因此,我将得到两个排序后的数组,它们指向原始数组(未更改!)
换句话说,我不想为每个排序的数组再分配100个对象

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

从文件中:

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


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

或者我没听清您的问题。

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

从文件中:

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


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


或者我没听清你的问题。

这真的很容易。检查它:

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个已分配的对象。

这非常简单。检查它:

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
对象。

我要做的是在代码中的几个位置打印已排序的数组,我不想每次打印数组时都对它们进行排序。因此,我将保留两个引用原始数组的已排序数组,并在需要时打印它们。@阿米尔:所以您应该可以使用正常的排序函数。考虑第一个答案:我不能使用NSArray,因为数组不是来自NSString类型,而是来自我的\u对象。因此,我必须使用nsmutablearray,在那里,sortedArrayUsingFunction:context:方法将返回void。所以这个答案对我帮助不大。@Amir:您可以对从NSObject继承的任何类使用NSArray。另外,我讨论的是sortedArrayUsingFunction:context:(注意:sorted),而不是sortArrayUsingFunction:context:。第一个总是返回一个新数组。后者仅在NSMutableArray中可用,并就地排序。编辑上一条注释:我的意思是sortUsingFunction:上下文:。我想你把这个方法和我提到的方法混淆了。NSMutableArray是NSArray的一个子类。它无法重写父方法并返回void。我要做的是在代码中的几个位置打印排序的数组,而不是每次打印数组时都对它们进行排序。因此,我将保留两个引用原始数组的已排序数组,并在需要时打印它们。@阿米尔:所以您应该可以使用正常的排序函数。考虑第一个答案:我不能使用NSArray,因为数组不是来自NSString类型,而是来自我的\u对象。因此,我必须使用nsmutablearray,在那里,sortedArrayUsingFunction:context:方法将返回void。所以这个答案对我帮助不大。@Amir:您可以对从NSObject继承的任何类使用NSArray。另外,我讨论的是sortedArrayUsingFunction:context:(注意:sorted),而不是sortArrayUsingFunction:context:。第一个总是返回一个新数组。后者仅在NSMutableArray中可用,并就地排序。编辑上一条注释:我的意思是sortUsingFunction:上下文:。我想你把这个方法和我提到的方法混淆了。NSMutableArray是NSArray的一个子类。它不能重写父方法并返回void。类是用什么语言声明的?那是C++吗?声明的类是什么语言?那是C++吗?我不完全理解NSSortDescriptor做什么?带钥匙的SortDescriptor是什么?假设我想按属性名(字符串)排序,如何初始化NSSortDescriptor*sortByName对象来实现这一点?如果我参考上面的代码,并假设原始数组有100个my_obj对象,那么对象sortedByName是否引用了原始100个对象,以便它们根据my_obj的属性名(字符串)对alfa betic进行排序?@Amir排序描述符是如何对对象集合进行排序的抽象。可以将其视为SQL查询中的“ORDERBY”子句。如果要按对象的
名称
排序,则使用的键是
@“name”
。要按
myIntegerProperty
排序,键为
@“myIntegerProperty”
。您的对象将不会被复制。排序后的数组将只包含对原始对象的引用。有人可以帮我声明my_obj类型中的100个对象吗?我有一条xml消息,其中包含来自my_obj类型的100个对象的信息。如何提前分配100个对象?在C++中,这将是MyOObjObj[100 ];或者my_obj*obj=新obj[100];目标c中的语法是什么?我如何访问这些对象?(在c++中:obj[x]=等…)谢谢我不完全理解NSSortDescriptor做什么?带钥匙的SortDescriptor是什么?假设我想按属性名(字符串)排序,如何初始化NSSortDescriptor*sortByName对象来实现这一点?如果我参考上面的代码,并假设原始数组有100个my_obj对象,那么对象sortedByName是否引用了原始100个对象,以便它们根据my_obj的属性名(字符串)对alfa betic进行排序?@Amir排序描述符是如何对对象集合进行排序的抽象。可以将其视为SQL查询中的“ORDERBY”子句。如果你想按