iOS中ArrayList的替代方案?

iOS中ArrayList的替代方案?,ios,objective-c,arrays,Ios,Objective C,Arrays,我已经解析了一个JSON,它生成了一个元素数组。我希望将它存储在一个数组中,就像我们将动态地向arraylist添加元素并在以后访问它一样。对于iOS,动态添加元素并在以后检索元素,ArrayList的替代方案是什么。iOS中是否有其他独特的选项可用于动态存储和检索元素 数据1: 参考编号:1241 发票号码:1421241 发票日期:2016年2月6日 数据2: 参考编号:3241 发票号码:12421 发票日期:2016年2月6日 上面是我通过解析json得到的两个具有唯一元素的数据 在类A

我已经解析了一个JSON,它生成了一个元素数组。我希望将它存储在一个数组中,就像我们将动态地向arraylist添加元素并在以后访问它一样。对于iOS,动态添加元素并在以后检索元素,ArrayList的替代方案是什么。iOS中是否有其他独特的选项可用于动态存储和检索元素

数据1: 参考编号:1241 发票号码:1421241 发票日期:2016年2月6日

数据2: 参考编号:3241 发票号码:12421 发票日期:2016年2月6日

上面是我通过解析json得到的两个具有唯一元素的数据

在类A中,我添加以下代码以将nsmutablearray存储在nsuserdefaults中

for (NSUInteger i = 0; i < savecount; i++) {
    NSMutableArray *newArray = [[NSMutableArray alloc] init];
    [myArrays addObject:newArray];
    [newArray addObject:shipmentReferenceNumber];
    [[NSUserDefaults standardUserDefaults] setObject:newArray forKey:@"shipmentReferenceNumber "];
}

在objC和swift中,
ArrayList
是一个
NSMutableArray



< > >代码>散列图类似的功能(存储密钥值对,密钥是唯一的)是由<代码> NS字典> /Calp>

< P > NSMutabRayLay]如果数组是可编辑的,可以使用NSRabase.< /P> < p>原谅我,如果我误解了你想要达到的,但是我会考虑创建一个数据模型对象:

@interface Data : NSObject
@property (nonatomic) NSInteger referenceNumber;
@property (nonatomic) NSInteger invoiceNumber;
@property (strong, nonatomic) NSString *invoiceDate;
@end
然后,您可以创建一个数据对象数组:

@property (strong, nonatomic) NSMutableArray <Data *> *dataArray;
@property(强,非原子)NSMutableArray*dataArray;

NSArray一起使用
哈希映射
。使用以下代码

在A类存储时:

    NSMutableArray* arrayList = [[NSMutableArray alloc] init];
    for (int i=0; i<savecount; i++) {

        NSDictionary* innerDict = [NSDictionary dictionaryWithObjectsAndKeys:your_referenceNo,@"referenceNo",your_InvoiceNumber,@"invoiceNumber",your_InvoiceDate,@"invoiceDate", nil];

        [arrayList addObject:innerDict];
    }

    NSData *encodedObject = [NSKeyedArchiver archivedDataWithRootObject:arrayList];
   [[NSUserDefaults standardUserDefaults] setObject:encodedObject forKey:@"data"];
    NSData* data = [[NSUserDefaults standardUserDefaults] objectForKey:@"data"];
    NSMutableArray* arrayList = [NSKeyedUnarchiver unarchiveObjectWithData:data];
    NSLog(@"Reference No : %@",arrayList[0][@"referenceNo"]);
编辑:以动态访问arraylist

   for(int i=0; i<[arrayList count];i++){
     NSLog(@"Reference No : %@",arrayList[i][@"referenceNo"]);
   }

for(int i=0;i这里是一个数据结构,它动态增加并按索引获取,基本上,它是一个普通的链表类,内部有一个动态数组以提供按索引获取数据的功能,它复制了空间,但您可以在更新数组后删除链表,请参见代码:

struct LinkedNode
{
    long data;
    LinkedNode* next;
};


class LinkedList
{
public:
    LinkedList();
    ~LinkedList();
    LinkedNode* head;
    long Count;
    long * Data;
    void add(long data);
    void update();
    //long get(long index);
};

LinkedList::LinkedList(){
    this->Count = 0;
    this->head = NULL;
}

LinkedList::~LinkedList(){
    LinkedNode * temp; 
    while(head){
        temp= this->head ;
        head = head->next;
        delete temp;
    }
    if (Data)
        delete [] Data; Data=NULL;
}

void LinkedList::add  (long data){
    LinkedNode * node = new LinkedNode();
    node->data = data;
    node->next = this->head;
    this->head = node;
    this->Count++;}

void LinkedList::update(){
    this->Data= new long[this->Count];
    long i = 0;
    LinkedNode * node =this->head;
    while(node){
        this->Data[i]=node->data;
        node = node->next;
        i++;
    }
}

如果你使用这个,请参考我的工作

即使我可以模拟HashMap也很好,因为有很多元素需要存储。害怕我的更新问题请看阅读我的更新问题在保存和阅读时你不使用相同的键。为什么你希望它工作?如何动态访问它。我的意思是,如何获取arra的值当我不知道运行时将生成的数组的大小时,动态地在b类中输入y?@Stanly,请检查我更新的答案。如果你在任何地方卡住了,请告诉我。
struct LinkedNode
{
    long data;
    LinkedNode* next;
};


class LinkedList
{
public:
    LinkedList();
    ~LinkedList();
    LinkedNode* head;
    long Count;
    long * Data;
    void add(long data);
    void update();
    //long get(long index);
};

LinkedList::LinkedList(){
    this->Count = 0;
    this->head = NULL;
}

LinkedList::~LinkedList(){
    LinkedNode * temp; 
    while(head){
        temp= this->head ;
        head = head->next;
        delete temp;
    }
    if (Data)
        delete [] Data; Data=NULL;
}

void LinkedList::add  (long data){
    LinkedNode * node = new LinkedNode();
    node->data = data;
    node->next = this->head;
    this->head = node;
    this->Count++;}

void LinkedList::update(){
    this->Data= new long[this->Count];
    long i = 0;
    LinkedNode * node =this->head;
    while(node){
        this->Data[i]=node->data;
        node = node->next;
        i++;
    }
}