0

有没有办法重新排列对象数组,以便重新排列内容,以便所有第 x元素都分组到另一个数组中?我不确定解释这一点的最佳方法,所以我将举例说明:

theArray 有 5 个属性:数量、颜色、大小、高度、质量。该数组有 50 个实例,每个实例具有不同的属性。

我想重新排列它,所以有 5 个数组,每个数组中有 50 个项目。

我会这样做的方式是:

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];
}

所以我想我的问题是,有没有更简单/更有效的方法来做到这一点?

4

1 回答 1

2

只需使用 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.

这会成功的。

假设您在instances数组中的项目是从1..n调用中编号的,[instances valueForKey:@"number"]那么将返回一个NSArray,如@[@1, @2, @3, @4, ...].

于 2013-01-30T15:20:31.133 回答