NSCountedSetを使用できるようです。「リンゴ」と「リンゴ」が等しい場合、カウントされたセットに含まれる「果物」の数と、セットに含まれる「リンゴ」の数の両方を知ることができます。
Appleのドキュメント:
NSCountedSetクラスは、不明瞭なオブジェクトの可変で順序付けられていないコレクションへのプログラムインターフェイスを宣言します。カウントされたセットは、バッグとも呼ばれます。
NSCountedSetオブジェクトに挿入された個別のオブジェクトには、それぞれカウンターが関連付けられています。NSCountedSetは、オブジェクトが挿入された回数を追跡し、オブジェクトが同じ回数削除されることを要求します。したがって、オブジェクトがセットに複数回追加された場合でも、NSSetオブジェクトにはオブジェクトのインスタンスが1つだけあります。スーパークラスNSSetによって定義されたcountメソッドには、特別な意味があります。セット内でオブジェクトが表される合計回数ではなく、個別のオブジェクトの数を返します。NSSetクラスとNSMutableSetクラスは、要素が異なる静的セットと動的セットにそれぞれ提供されます。
アップデート
次に例を示します。
NSCountedSet * fruits = [[NSCountedSet alloc] initWithArray:@[@"apple", @"apple", @"banana", @"apple", @"pear", @"banana"]];
NSLog(@"fruit count = %d", [fruits count]);
NSLog(@"num apples = %d", [fruits countForObject:@"apple"]);
NSLog(@"num bananas = %d", [fruits countForObject:@"banana"]);
NSLog(@"num pears = %d", [fruits countForObject:@"pear"]);
NSLog(@"num oranges = %d", [fruits countForObject:@"orange"]);
出力されます:
2013-02-02 13:07:59.058 test[46614:c07] fruit count = 3
2013-02-02 13:07:59.059 test[46614:c07] num apples = 3
2013-02-02 13:07:59.062 test[46614:c07] num bananas = 2
2013-02-02 13:07:59.062 test[46614:c07] num pears = 1
2013-02-02 13:07:59.063 test[46614:c07] num oranges = 0