[英]Objective-C: Creating NSMutableDictionary or NSMutableArray
For my iPhone app, I want to manage values either in NSMutableDictionary
or NSMutableAarray
. 对于我的iPhone应用程序,我想在
NSMutableDictionary
或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. 在我的情况下,回合数假设为固定值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.