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

Is this what you are looking for? :

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

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

This is called KVC (Key-Value Coding) and uses strings to access an object's property. This example goes through all of the elements in the array and asks for its number or name property, then returns the result as an array.

This could also be achieved with a for-loop. I am mainly including this to give you an idea of what is happening:

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

Obviously this would work as well, but why not use valueForKey: when it is designed for this?

于 2013-08-22T16:46:43.673 回答
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 回答