我有一个 NSObject“TeamStats”,其中包含一组“Possession”对象。“Possession”对象包含一个“Players”数组……对于每个“Game”,还创建了一个“TeamStats”。“Possession”对象的两个属性是 didEndInTurnover 和 didEndInScore。我需要做的是在一个回合中找到最常见的一组球员,即 didEndInScore 和 didEndInTurnover ...
解决这个问题的最佳方法是什么?
我有一个 NSObject“TeamStats”,其中包含一组“Possession”对象。“Possession”对象包含一个“Players”数组……对于每个“Game”,还创建了一个“TeamStats”。“Possession”对象的两个属性是 didEndInTurnover 和 didEndInScore。我需要做的是在一个回合中找到最常见的一组球员,即 didEndInScore 和 didEndInTurnover ...
解决这个问题的最佳方法是什么?
好的,首先,我将通过用一个新的 NSString 变量替换玩家数组来简化这一点,该变量只告诉该数据用于哪个小队(因此您将拥有一个NSString *squadName
变量(并且您将设置posession1.squadName = @"Squad A"
或类似的东西)为对象的属性Possession
,而不是玩家数组。如果您想打印出玩家姓名或号码,您总是可以在其他地方设置一个数组或字典来保存该信息以打印到屏幕上 - 比如
NSArray squad1Array = [NSArray arrayWithObjects:@"Bill",@"Tom",@"Joe",nil];
NSArray squad2Array = [NSArray arrayWithObjects:@"Jim",@"Jeff",@"Mike",nil];
设置好小队后,您需要遍历Possession
对象数组。在那个循环中,首先检查didEndInTurnover
. 然后,您需要每个小队和每个小队的整数变量didEndIn...
(例如int squadAScore
, int squadBScore
,int squadATurnover
等int squadBTurnover
)。当您循环播放时,检查哪个小队对该控球有效,并酌情增加该小队的整数计数器。最后,在你遍历所有财产后比较你的整数计数器,看看哪个是最大的。
请注意,如果您想更好地组织它或使其更灵活且更少硬编码,您可能会考虑使用嵌套的 NSDictionaries 而不是整数计数器 - 将其设置为字典需要更多的工作,但如果您稍后需要添加新的小队或其他东西,将来进行此类更改可能会更容易。
好吧,我不知道这是否可以理解。如果它真的没有意义,我可以尝试放置一些循环大致是什么样子的代码,让我知道。
编辑:这是使用字典的循环外观的一些示例:
// Define counters for squads
NSMutableDictionary *turnoverDictionary = [[NSMutableDictionary alloc] init];
NSMutableDictionary *scoreDictionary = [[NSMutableDictionary alloc] init];
// Loop over all possessions
for (YourPossessionClass *currentPossession in myTeamStats.possessionArry)
{
if (currentPossession.didEndInTurnover == YES)
{
BOOL found = NO;
for (NSString *squad in [turnoverDictionary allKeys])
{
if ([squad isEqualToString:currentPossession.squad])
{
int count = [[turnoverDictionary objectForKey:squad] intValue];
count ++;
NSNumber *newCount = [NSNumber numberWithInteger:count];
[turnoverDictionary setObject:newCount ForKey:squad];
found = YES;
}
//else {Do Nothing - this isn't the squad we want}
}
// Add a new entry to the dictionary for this squad if this squad didn't exist before
if (!found)
{
[turnoverDictionary setObject:[NSNumber numberWithInt:0] forKey:currentPossession.squad];
}
//else {Do Nothing - squad was already in dictionary}
}
else if {currentPossession.didEndInScore == YES}
{
// ... Do all the same stuff as we did for turnover, except now add them to the scoreDictionary instead of the turnoverDictionary ...
}
}