Objective c 有没有办法重新排列数组列表的内容?
有没有一种方法可以重新排列一个对象数组,使内容重新排列,使所有第x个元素都分组到另一个数组中?我不确定最好的解释方法,因此我将用一个例子来说明: 阵列有5个属性:数字、颜色、大小、高度和质量。此数组有50个实例,每个实例具有不同的属性 我想重新安排它,这样有5个数组,每个数组中有50个项目 我会这样做:Objective c 有没有办法重新排列数组列表的内容?,objective-c,Objective C,有没有一种方法可以重新排列一个对象数组,使内容重新排列,使所有第x个元素都分组到另一个数组中?我不确定最好的解释方法,因此我将用一个例子来说明: 阵列有5个属性:数字、颜色、大小、高度和质量。此数组有50个实例,每个实例具有不同的属性 我想重新安排它,这样有5个数组,每个数组中有50个项目 我会这样做: NSMutableArray *innerTemp = [[NSMutableArray alloc] initWithCapacity:49]; NSMutableArray *outerTe
NSMutableArray *innerTemp = [[NSMutableArray alloc] initWithCapacity:49];
NSMutableArray *outerTemp = [[NSMutableArray alloc] initWithCapacity:4];
for (int i = 0 ; i < [theArray count]; i++){
[innerTemp addObject:[[theArray objectAtIndex:i] number]];
[innerTemp addObject:[[theArray objectAtIndex:i] color]];
[innerTemp addObject:[[theArray objectAtIndex:i] height]];
[innerTemp addObject:[[theArray objectAtIndex:i] age]];
[innerTemp addObject:[[theArray objectAtIndex:i] quality]];
[outerTemp addObject:temp];
}
NSMutableArray*innerTemp=[[NSMutableArray alloc]initWithCapacity:49];
NSMutableArray*outerTemp=[[NSMutableArray alloc]initWithCapacity:4];
对于(int i=0;i<[阵列计数];i++){
[innerTemp添加对象:[[theArray对象索引:i]编号];
[innerTemp添加对象:[[theArray对象索引:i]颜色]];
[innerTemp添加对象:[[theArray对象索引:i]高度]];
[innerTemp添加对象:[[theArray对象索引:i]age];
[innerTemp添加对象:[[theArray对象索引:i]质量]];
[outerTemp addObject:temp];
}
所以我想我的问题是,有没有更简单/更有效的方法来做到这一点?只需使用KVC():
假设您的类看起来像这样:
@interface InstanceClass : NSObject
// IIRC properties need to be objects (hence the NSValue around NSSize), there is no auto-wrapping.
@property (readwrite, strong, nonatomic) NSNumber *number;
@property (readwrite, strong, nonatomic) NSColor *color;
@property (readwrite, strong, nonatomic) NSValue *sizeValue;
@property (readwrite, strong, nonatomic) NSNumber *height;
@property (readwrite, strong, nonatomic) NSNumber *quality;
@end
你有一个像这样的数组
NSArray *instances = @[instance1, instance2, instance3, instance4, ...];
那么这就是你所需要的:
NSArray *numbers = [instances valueForKey:@"number"]; // array of numbers.
NSArray *colors = [instances valueForKey:@"color"]; // array of colors.
NSArray *sizes = [instances valueForKey:@"size"]; // array of sizes.
NSArray *heights = [instances valueForKey:@"height"]; // array of heights.
NSArray *qualities = [instances valueForKey:@"quality"]; // array of qualities.
这样就行了
假设您的
实例
数组中的项目从1..n
编号,那么调用[instances valueForKey:@“number”
将返回一个NSArray像[@1,@2,@3,@4,…]
这样数组存储一个具有属性的自定义对象number
,color
,等等?是的,每个数组都有一个具有5个properties@trojanfoe:或者只是看看我的(已经在那里了)p他们已经在自己的班上了;请参阅对他的问题的评论。在这种情况下,最后一个片段就足够了。@trojanfoe:请参阅此处:。这是一种非常聪明的KVC魔法方法。它基本上通过一个简单的方法调用实现了与for循环相同(甚至更多)的功能。使用valueForKeyPath:
甚至可以提供(周期分隔的)关键路径并让它解析它们;但是OP在数组(不是字典)中有对象,并且希望属性在5个数组中。您的代码假设值在字典中,并且您没有显示将所有实例转换为字典的代码。不,它没有。请参阅有关NSarray如何响应valueForKey:
的指南(我在前面的评论中发布了链接)。简言之:它们基本上将消息转发给它们的内容对象,并将它们的响应收集到一个新数组中,然后返回。阅读指南。值得这就是按键路径绑定到数组内容的工作方式。NSArrayController上“arrangedObjects.foo”的键值绑定正好做到了这一点(至少原则上是这样),例如。