简体   繁体   English

Objective-C:创建NSMutableDictionary或NSMutableArray

[英]Objective-C: Creating NSMutableDictionary or NSMutableArray

For my iPhone app, I want to manage values either in NSMutableDictionary or NSMutableAarray . 对于我的iPhone应用程序,我想在NSMutableDictionaryNSMutableAarray管理值。

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. 在我的情况下,回合数假设为固定值10,而总玩家数为2,这也是固定值。

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: 您可以使NSDictionary的NSMutableArray:

      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 : 理念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) 理念2 :(如果> 2个玩家,则适合

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) 想法3 :(更纯C的方法)

// 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"]; 代替例如[playerArounds setObject:@"5" forKey:@"1"]; , since your values will be int (and not strings), you'd better use (it would make more sense) : ,因为您的值将是int(而不是字符串),所以最好使用(这将更有意义):

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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