【问题标题】:How to set object count to zero(or some value) in NSCountedSet?如何在 NSCountedSet 中将对象计数设置为零(或某个值)?
【发布时间】:2012-05-28 13:02:03
【问题描述】:

我有关注NSCountedSet

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

现在我想从我的集合中删除 item1 对象。
一种解决方案是

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

输出:

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

或者我只想从我的集合中删除 1000 个 item1 对象。

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

输出:

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

有没有更好的解决方案?

【问题讨论】:

  • 如果你知道对象“item1”,你可以直接调用“removeObject”而不需要循环mySet。
  • @WhiteTiger removeObject: 减少与 NSCountedSet 关联的计数。

标签: objective-c cocoa nsset nsmutableset nscountedset


【解决方案1】:

您可以使用谓词进行过滤

[mySet filterUsingPredicate:[NSPredicate predicateWithFormat:@"self != %@", item1]];

【讨论】:

  • 有什么办法可以减少对象的数量?
  • 听起来您需要制作自己的对象,该对象可以在幕后使用 NSMutableSet,但可以为您提供所需的附加行为...
【解决方案2】:

我认为你没有理解这个问题,所以我得到了这些结果:

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

[mySet removeObject:@"one"];

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

【讨论】:

  • 在你的removeObject: 之前粘贴[mySet addObject:@"one"]; 看看这不起作用...
  • @WhiteTiger 你的套装只包含一个 [1](计数为 1),我有 item1 [2000](计数为 2000)。
  • 我没有意识到你可能有重复的项目
  • @WhiteTiger:这就是计数集的目的:它告诉你每个项目中有多少。其他种类的套装不允许重复;每个项目要么在非计数集中,要么不在。
【解决方案3】:

NSCountedSet 不提供将某个对象的计数修改一定数量的方法(真的很遗憾)。

如果速度不是问题,您可以使用上述方法。但是,如果您需要其他东西:子类化 NSMutableSet 以提供这种“计数”功能可能是您的最佳选择。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多