0

オブジェクトが繰り返される辞書オブジェクトの配列があります。オブジェクトが繰り返された回数を表す別のキーを使用して、オブジェクトが繰り返されない別の配列を作成する必要があります。

例:

object A (key1, key2)
object B (key1, key2)
object C (key1, key2)
object B (key1, key2)
object B (key1, key2)

結果、新しい辞書配列:

object A (key1, key2, count(1))
object B (key1, key2, count(3))
object C (key1, key2, count(1))

NSDictionaryこれまでのコードであるオブジェクトに慣れていないので、苦労しています:

for(int j = 1; j < [objects count]; j++)
{
    for(int k = j+1;k < [objects count]-j;k++)
    {
        NSMutableDictionary *item1 = [objects objectAtIndex:j];
        NSMutableDictionary *item2 = [objects objectAtIndex:k];

        NSString *str1 = [item1 valueForKey:@"setArrivalAirportOrCode"];
        NSString *str2 = [item2 valueForKey:@"setArrivalAirportOrCode"];

        NSLog(@"%@==%@ ???",str1,str2);
        if([str1 isEqualToString:str2])
            NSLog(@"%@==%@",str1,str2);
    }
}

オブジェクトを数えて新しい配列にコピーしようとしていますが、正しい方向に進んでいるかどうかわかりません。英語が下手で申し訳ありません。反対票を投じないでください。常にオンラインになっていることを何でも聞いてください。

前もって感謝します!

4

1 に答える 1

3

NSCountedSetを作成すると、カウントが処理されます。

この例では、NSString オブジェクトを使用しましたが、どのタイプのオブジェクトでも実行できます。

NSString        *stringA    = @"stringA";
NSString        *stringB    = @"stringB";
NSString        *stringC    = @"stringC";
NSArray         *array      = [NSArray arrayWithObjects:stringA, stringB, stringC, stringB, stringB, nil];
NSCountedSet    *countedSet = [NSCountedSet setWithArray:array];

NSLog(@"%@", countedSet);
// Results:  <NSCountedSet: 0x6b35790> (stringA [1], stringB [3], stringC [1])

カウントを取得するには、次を使用します。

NSLog(@"%d", [countedSet countForObject:stringB]);
// Result:  3

別の配列で結果を取得するには (カウントが失われることに注意してください。そのためにカウントされたセットを使用します)、次を使用します。

NSArray *array2 = [countedSet allObjects];
NSLog(@"%@", array2);
/*
 * (
 * stringA,
 * stringB,
 * stringC
 * )
 */
于 2012-11-19T12:52:55.323 に答える