Sam
Sam

Reputation: 829

objective-c multi-dimensional array

I want to use a variable-sized multi-dimensional array in my app to save data. The data structure I want to use is as below, the first element in each row is followed by corresponding multiple values.

 array = {   {a, a_val1, a_val2, a_val3}.  
             {b, b_val1},  
             {c, c_val1, c_val2, c_val3, c_val4, c_val5}  
         }

Any idea how I can implement in objective-c?

Upvotes: 3

Views: 13338

Answers (3)

bigkm
bigkm

Reputation: 2277

use NSMutableArray like so

NSMutableArray *curRow; /* use to access the row while loading with objects */
NSMutableArray *array = [[NSMutableArray alloc] init]; /* your main multidim array */
curRow = [NSMutableArray array];
[curRow addObject:/* what you want here */];
[curRow addObject:/* what you want here */];
[curRow addObject:/* what you want here */];
[array addObject:curRow]; /* first row is added */

/* rinse and repeat */
curRow = [NSMutableArray array];
[curRow addObject:/* what you want here */];
[curRow addObject:/* what you want here */];
[curRow addObject:/* what you want here */];
[array addObject:curRow];

Upvotes: 15

Bob Godwin
Bob Godwin

Reputation: 78

Objective-C does not have a real 2 dimensional array type but you can implement it with the following codes..

in your header file --- yourheader.h

#import <Foundation/Foundation.h>

@interface yourheader : NSObject{

    NSMutableDictionary* DictionaryArrayType;
    NSMutableArray* MultiArrayType;
    NSArray* CaptionTitle;
    NSArray* ObjectValue;

}

@property (strong, nonatomic) NSMutableDictionary* DictionaryArrayType;

@property (strong, nonatomic) NSArray* CaptionTitle;

@property (strong, nonatomic) NSArray* ObjectValue;

@property (strong, nonatomic) NSMutableArray* MultiArrayType;

-(id) AddArrayObjects:(NSString*)_Name : (NSString*)_Surname :(NSString*)_Age;

-(id) AddArrayDictionaryObject:(NSArray*)_ArrayObject : (NSArray*)_ArrayKey;

-(id) AddMultiArrayType:(id)_ArrayObject;

-(void) ShowMultiArrayType:(id)_ArrayObject;

@end

Now add to your objective-c file ---- objective-c.m

#import "yourheader.h"

@implimentation yourheader

@synthesize DictionaryArrayType;

@synthesize CaptionTitle;

@synthesize ObjectValue;

@synthesize MultiArrayType;


-(id)init {

    if(self = [super init]){

        NSString* const NAME = @"NAME";
        NSString* const SURNAME = @"SURNAME";
        NSString* const AGE = @"AGE";
        //Adding fixed content to CaptionTitle Array
        [self setCaptionTitle:[NSArray arrayWithObjects:NAME, SURNAME, AGE, nil]];

        //add values to ObjectValue array
        [self AddArrayObjects:@"Bob" :@"Obi" :@"200"];

        //add values to dictionary
        [self AddDictionaryArrayType:ObjectValue :CaptionTitle];

        //Add to the Multi dimensional array [][]
        [self AddMultiArrayType:DictionaryArrayType];  

        //add the second row values to ObjectValue array
        [self AddArrayObjects:@"Barack" :@"Obama" :@"50"]; 

        //add values to dictionary
        [self AddDictionaryArrayType:ObjectValue :CaptionTitle];

        //Add to the Multi dimensional array [][]
        [self AddMultiArrayType:DictionaryArrayType];  

        //display the 2d Array
        [self ShowMultiArrayType:MultiArrayType];

    }

    return self;
}


-(id)AddArrayObjects:(NSString *)_name :(NSString *)_surname :(NSString *)_age {

    //Set the Array Objects;
    [self setObjectValue:[NSArray arrayWithObjects:_name, _surname, _age, nil]];

    return self;

}

-(id)AddDictionaryArrayType:(NSArray *)_ArrayObject :(NSArray*)_ArrayKey {

    if(!DictionaryArrayType) {
        //initialize disctionary
        [self setDictionaryArrayType:[NSMutableDictionary dictionary]];
    }
    //add array obeject and Fixed Key decleared in CaptionTitle array
    DictionaryArrayType = [NSMutableDictionary dictionaryWithObjects:_ArrayObject forKeys:_ArrayKey];
    return self;
}

-(id) AddMultiArrayType:(id)_ArrayObject {

    if(!MultiArrayType) {

        [self setMultiArrayType:[NSMutableArray array]];
    }

    [MultiArrayType addObject:_ArrayObject]; 

    return self;
}

-(void)ShowMultiArrayType:_ArrayObject {

    for(id objects in _ArrayObject ) {

        for(id key in objects) {
            NSLog(@"%@ key = : object =  %@", key, [objects objectForKey:key]);

        }
    }
}


@end;

To finish add this to your appdelegate.m file inside the app

  yourclassname* _yourclasspointer = [[yourclassname alloc] init];

 [_youclasspointer ShowMultiArrayType:[_yourclasspointer MultiArrayType]];

You should see it in you console.

Upvotes: -1

Jhaliya - Praveen Sharma
Jhaliya - Praveen Sharma

Reputation: 31722

use NSMutableArray

Below is the example for your understanding ...

NSMutableArray * multiArray = [[NSMutableArray alloc] initWithCapacity:5];
[multiArray addObject:[NSArray arrayWithObjects:a,a_val1,a_val2]];
[multiArray addObject:[NSArray arrayWithObjects:a,a_val1,a_val2,a_val3,a_val4]];
[multiArray addObject:[NSArray arrayWithObjects:a,a_val1,a_val5]];
[multiArray addObject:[NSArray arrayWithObjects:a,a_val1,a_val2,a_val3,a_val4,a_val5,a_val6]];

And Don't forget to release to multiArray array because we have alloced it ...

Upvotes: 5

Related Questions