2

私は以下を持っていますNSCountedSet

<NSCountedSet: 0x53dfc0> (item1 [2000], item2 [9000], item3 [200], item4  [3000])

item1セットからオブジェクトを削除したいと思います。
1つの解決策は

while([mySet countForObject:item1])
 [mySet removeObject:item1];

出力:

<NSCountedSet: 0x53dfc0> (item2 [9000], item3 [200], item4  [3000])

item1または、セットから1000個のオブジェクトのみを削除したい。

    NSUInteger count = [mySet countForObject:item1];
    while(count)
    {
     [mySet removeObject:item1];
     --count;
    }

出力:

<NSCountedSet: 0x53dfc0> (item1 [1000], item2 [9000], item3 [200], item4  [3000])

これに対するより良い解決策はありますか?

4

3 に答える 3

2

述語でフィルタリングできます

[mySet filterUsingPredicate:[NSPredicate predicateWithFormat:@"self != %@", item1]];
于 2012-05-28T13:23:44.833 に答える
0

私はあなたが問題を理解していないと思うので、私はこれらの結果を得ます:

<NSCountedSet: 0x6d9ee40> (two [1], three [1], one [1], four [1])

[mySet removeObject:@"one"];

<NSCountedSet: 0x6d9ee40> (two [1], three [1], four [1])
于 2012-05-28T13:21:42.113 に答える
0

NSCountedSetは、特定のオブジェクトのカウントを特定の量だけ変更するメソッドを提供していません(本当に残念です)。

速度が問題にならない場合は、上記の方法を使用できます。ただし、他に何かが必要な場合は、この「カウント」機能を提供するためにNSMutableSetをサブクラス化するのがおそらく最良のオプションです。

于 2012-05-28T17:51:47.037 に答える