-1

私の配列オブジェクトは次のとおりです。

10,10,10
20,23,14
10,10,10
10,10,10
10,10,10
32,23,42
32,23,42
10,10,10
32,23,23
32,23,23

この配列を調べて、同じオブジェクトが何回連続して繰り返されるかを調べてから、 を追加して、その繰り返し回数を計算するにはどうすればよいですか?

次に、次のようなオブジェクトを含む新しい配列を保存します。

10,10,10,1
20,23,14,1
10,10,10,3
32,23,42,2
10,10,10,1
32,23,23,2

どんな助けでも大歓迎です。

ありがとう!

4

4 に答える 4

0

3 つの整数ごとに独自の配列に分割します (それらが文字列であることを確認してください)。

次に、これらの配列のそれぞれを反復処理し、NSMutableDictionary に入力します。キーは文字列 (数値)、値はカウンター (1 回表示された場合は 1 を追加するなど) です。

最高のキーへのポインターを保持します (newCount >highestCountPointer の場合、highestCountPointer=newCount)

その繰り返しの最後に、highestCountPoints の数を配列の最後に追加します。

于 2013-04-30T20:49:23.733 に答える
0

これを試して:

NSMutableArray *outArray = [[NSMutableArray alloc] init];
for (NSUInteger j = 0; j < [theArray count]; j++) {
    id object = [theArray objectAtIndex:j];
    NSUInteger repeats = 1;
    while (j + 1 < [theArray count] && [[theArray objectAtIndex:j + 1] isEqual:object]) {
        j++;
        repeats++;
    }
    [outArray addObject:object];
    [outArray addObject:[NSNumber numberWithUnsignedInteger:repeats]];
}
return outArray;

入力配列が変更可能な場合、これはその場で行うこともできます。それは読者の練習問題として残しておきます。

于 2013-04-30T20:49:51.987 に答える
0

私は Objective C のプログラマーではないので、言葉の間違いはご容赦ください。次のようなものが仕事をするはずです:

NSMutableArray *result = [[NSMutableArray alloc] init];
id pending = nil;
NSUInteger count = 0;
for (NSUInteger i = 0; i < [theArray count]; i++) {
    id object = [theArray objectAtIndex:i];
    if ([object isEqual:pending]) {
        count++;
    } else {
        if (pending != nil) {
            [result addObject:[NSString stringWithFormat:@"%@,%d", pending, count]];
        }
        pending = object;
        count = 1;
    }
}
if (pending != nil) {
    [result addObject:[NSString stringWithFormat:@"%@,%d", pending, count]];
}
于 2013-04-30T20:50:38.707 に答える