0

クラスファイルを含むかなり大きな NSMutableArray があります。配列には、次のような複数のプロパティがあります。

[Element elementsName:@"Lithium" elementsNumber:@"3"],
[Element elementsName:@"Beryllium" elementsNumber:@"4"],
[Element elementsName:@"Boron" elementsNumber:@"5"],
[Element elementsName:@"Carbon" elementsNumber:@"6"],
[Element elementsName:@"Nitrogen" elementsNumber:@"7"],
[Element elementsName:@"Oxygen" elementsNumber:@"8"],
[Element elementsName:@"Fluorine" elementsNumber:@"9"],
[Element elementsName:@"Neon" elementsNumber:@"10"],

elementsName と elementsNumber に個別にアクセスできる必要があります。

誰かがこれを行う方法を知っていますか?それは可能ですか? ありがとう!(以下にさらにコードを示します!)

Element.h (配列のクラス)

@interface Element : NSObject
{
    NSString *name;
    NSString *number;
}

@property(nonatomic, copy)NSString *name;
@property(nonatomic, copy)NSString *number;

+(id)elementsName:(NSString *)name elementsNumber:(NSString *)number;

および Element.m

#import "Element.h"

@implementation Element;
@synthesize number;
@synthesize name;

+(id)elementsName:(NSString *)name elementsNumber:(NSString *)number
{
    Element *newElement = [[self alloc] init];
    newElement.name = name;
    newElement.number = number;
    return newElement;
}

@end
4

3 に答える 3

1

次のようなことを試すことができます:

for(int i = 0; i<elementArray.count; i++)
{
    NSString *name = ((Element*)[elementArray objectAtIndex:i]).name;
    NSString *number = ((Element*)[elementArray objectAtIndex:i]).number;
}
于 2013-08-22T16:50:38.157 に答える
0

代わりに NSDictionary を使用できます。

NSArray *arrOfDic=@[@{@"elementsName":@"Lithium",@"elementsNumber":@"3"},
                    @{@"elementsName":@"Beryllium",@"elementsNumber":@"4"},
                    @{@"elementsName":@"Boron",@"elementsNumber":@"5"},
                    @{@"elementsName":@"Carbon",@"elementsNumber":@"6"},
                    @{@"elementsName":@"Nitrogen",@"elementsNumber":@"7"}];


NSLog(@"dic is %@",arrOfDic);

要素とその番号を次のように取得します

   NSLog(@"FirstObject is Element = %@ Element No = %@",arrOfDic[0][@"elementsName"],arrOfDic[0][@"elementsNumber"]);
    NSLog(@"SecondObject is Element = %@ Element No = %@",arrOfDic[1][@"elementsName"],arrOfDic[1][@"elementsNumber"]);

そして、あなたのファイルの何が問題なのか、それはうまく機能しています。

NSMutableArray *mArray=[[NSMutableArray alloc] init];

[mArray addObject:[Element elementsName:@"Lithium" elementsNumber:@"3"]];
[mArray addObject:[Element elementsName:@"Beryllium" elementsNumber:@"5"]];
[mArray addObject:[Element elementsName:@"Boron" elementsNumber:@"6"]];

Element *element=(Element*)[mArray objectAtIndex:0];

NSLog(@"My first element is name = %@ ,number = %@",element.name,element.number);

出力 - -

私の最初の要素は name = Lithium 、number = 3 です

于 2013-08-22T16:54:25.507 に答える
0

これはあなたが探しているものですか?:

// returns an array of all numbers
NSArray *numbers = [elementArray valueForKey:@"number"];

// returns an array of all names
NSArray *names = [elementArray valueForKey:@"name"];

これは KVC (Key-Value Coding) と呼ばれ、文字列を使用してオブジェクトのプロパティにアクセスします。この例では、配列内のすべての要素を調べて、そのnumberornameプロパティを要求し、結果を配列として返します。

これは for ループでも実現できます。主にこれを含めて、何が起こっているのかを理解してもらいます。

NSMutableArray *names = [NSMutableArray array];
NSMutableArray *numbers = [NSMutableArray array];
for (Element *e in elementsArray) {
    [names addObject:e.name];
    [numbers addObject:e.number];
} 

明らかにこれも機能しますが、valueForKey:このように設計されている場合は使用しないのはなぜですか?

于 2013-08-22T16:46:43.673 に答える