0

すべての x番目の要素が別の配列にグループ化されるようにコンテンツが再配置されるように、オブジェクトの配列を再配置する方法はありますか? これを説明する最善の方法がわからないので、例を挙げて説明します。

theArray には、数値、色、サイズ、高さ、品質の 5 つのプロパティがあります。この配列には 50 個のインスタンスがあり、それぞれに異なるプロパティがあります。

これを再配置して、各配列内に 50 個の項目を持つ 5 つの配列があるようにします。

私がそれを行う方法は次のとおりです。

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への呼び出しから番号付けされていると仮定すると、 のようなNSArray[instances valueForKey:@"number"]が返されます。@[@1, @2, @3, @4, ...]

于 2013-01-30T15:20:31.133 に答える