0

「Possession」オブジェクトの配列を保持するNSObject「TeamStats」があります。「Possession」オブジェクトは「Players」の配列を保持します...すべての「Game」に対して、「TeamStats」も作成されます。「Possession」オブジェクトの2つのプロパティは、didEndInTurnoverとdidEndInScoreです。私がする必要があるのは、didEndInScoreとdidEndInTurnoverである所有物内の最も一般的なプレーヤーの配列を見つけることです...

これに取り組むための最良の方法は何ですか?

4

1 に答える 1

1

さて、最初に、プレーヤーの配列を、そのデータの対象となる分隊を示す新しい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 squadATurnoverint 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 ...
    }
}
于 2013-03-06T17:13:16.633 に答える