具有多个属性的NSMutableArray

时间:2013-08-22 16:44:47

标签: ios objective-c nsarray

我有一个带有类文件的相当大的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

3 个答案:

答案 0 :(得分:1)

您可以尝试这样的事情:

for(int i = 0; i<elementArray.count; i++)
{
    NSString *name = ((Element*)[elementArray objectAtIndex:i]).name;
    NSString *number = ((Element*)[elementArray objectAtIndex:i]).number;
}

答案 1 :(得分:0)

这是你在找什么? :

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

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

这称为KVC(键值编码),它使用字符串来访问对象的属性。此示例遍历数组中的所有元素并询问其numbername属性,然后将结果作为数组返回。

这也可以通过for循环实现。我主要包括这个,让你知道发生了什么:

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

显然这也可行,但为什么不在为此设计时使用valueForKey:

答案 2 :(得分: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