简体   繁体   中英

Objective-C: Creating NSMutableDictionary or NSMutableArray

For my iPhone app, I want to manage values either in NSMutableDictionary or NSMutableAarray .

I want to store rating in this format

round   player1  player2
  1        6        8
  2        7        9
--        --        --

Here in my case number of round will be fix value suppose 10, and total player would be 2 that is also fix.

But user can submit their score in any random order but in single button click. Means

 score for round  "10" for both the player   enter
 score for round  "2"  for both the player   enter

How can I manage dictionary or array which could help me in retrieving them again easily?

Why only arrays or dictionaries in an object-oriented language?

@interface RoundResults : NSObject

@property (nonatomic, assign) NSInteger playerOneScore;
@property (nonatomic, assign) NSInteger playerTwoScore;

@end

@interface GameTotal : NSObject

- (void)setResults: (RoundResults *)results forRound: (NSInteger)round;
- (RoundResults *)resultsForRound: (NSInteger)round;
- (NSUInteger)countOfResults;

@end
//You can use combination of mutable array and dictionary to handle each round and player score

NSMutableArray *mutArrayRound=[[NSMutableArray alloc] initWithCapacity:10];


//--EDIT-------------------------------------------------------------------

//You need to do it somewhere so that it'll not give error for [mutArrayRound insertObject: atIndex:]

mutDic=[[NSMutableDictionary alloc] init];

for(int i=0;i<10;i++)
{
    [mutArrayRound addObject:mutDic];
}

[mutDic release];

//-------------------------------------------------------------------------

NSMutableDictionary *mutDic=[[NSMutableDictionary alloc] initWithCapacity:2];
[mutDic setValue:@"Score_Valaue" forKey:@"player1-Score"];
[mutDic setValue:@"Score_Valaue" forKey:@"player2-Score"];

//For Round1
[mutArrayRound insertObject:mutDic atIndex:0];

//For Round2
[mutArrayRound insertObject:mutDic atIndex:1];


/*
    You can access for particular round using mutDic=[mutArrayRound objectAtIndex:0];
    And to access player score, you can use key score=[mutDic valueForKey:@"Player1_Score"];
 */

[mutArrayRound release];
[mutDic release];

You can make NSMutableArray of NSDictionary:

      NSMutableArray *arr = [[NSMutableArray alloc] initWithCapacity:10];
                // Now say Player one got 50 and Player2 got 65 in first round then add them in dictionary


                NSDictionary *dict  = [[NSDictionary alloc] initWithObjectsAndKeys:@"50",@"P1",@"65",@"P2", nil];
                [arr addObject:dict];
[dict release];


            // As soon as you got the sores make a NSDictionary object and init it with objects like above and add that to the mutable array . It will add it to next index.

Hope this will help.

Idea 1 :

NSMutableDictionary* playerArounds = [NSMutableDictionary dictionary];
NSMutableDictionary* playerBrounds = [NSMutableDictionary dictionary];

[playerArounds setObject:@"5" forKey:@"1"]; 
// Player A scored 5 for round 1

// etc...

Idea 2 : (suitable if >2 players)

NSMutableArray* playerRounds = [NSMutableArray arrayWithObjects:nil];

for (int i=0; i<10; i++)
    [playerRounds addObject:[NSMutableDictionary dictionary]];

[[playerRounds objectAtIndex:0] setObject:@"5" forKey:@"1"];  
// Player 0 scored 5 for round 1

// etc...

Idea 3 : (a more pure-C approach)

// a 2-dimensional array
int scores[2][10]; 

scores[0][2] = 5;

// Player 0's score for round 3 (2+1) is 5

As pointed out :

Instead of eg [playerArounds setObject:@"5" forKey:@"1"]; , since your values will be int (and not strings), you'd better use (it would make more sense) :

eg [playerArounds setObject:[NSNumber numberWithInt:5] forKey:[NSNumber numberWithInt:1]];

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM