如何计算集合中属性值的出现次数?

时间:2015-09-08 22:58:55

标签: excel vba excel-vba

我有一些数据可以安排到自定义类对象的集合中。

每个对象除了其唯一名称外还有一些属性,我将其称为batchexists

我的集合中有很多对象,但batch只有几个可能的值(尽管可能的数量没有预先定义)。

计算batch的每个可能值的出现次数的最简单方法是什么?

最终我想创建一个像这样的用户形式(值是任意的,为了说明):

Batch A  25 parts  (2 missing)
Batch B  17 parts
Batch C  16 parts  (1 missing)

我的一个想法是创建一个自定义的“批处理”类,它将具有属性.count.existcount并创建这些对象的集合。

我想知道是否有更简单,更直接的方法来计算这些值。我应该废弃二级集合的想法,只是在生成用户表单时创建一些循环和计数器变量?

1 个答案:

答案 0 :(得分:0)

您已经很好地描述了两种可能性:

  1. 每次需要点数时,都会遍历您的收藏
  2. 预先计算统计数据,并在需要时访问
  3. 这是人们经常要做的常见选择。我认为这是性能与复杂性之间的关系。

    带有简单循环实现的选项1将花费您O(n)时间,其中n是您的集合的大小。而且,除非您的收藏是静态的,否则每次需要统计数据时都必须进行计算。从好的方面来说,天真的循环是非常简单的。频繁查询和/或大型集合的性能可能会受到影响。

    选项2快速检索,基本上是O(1)。但每次收集更改时,您都需要重新计算统计信息。然而,这是增量重新计算,即您不必遍历整个集合,而只需更改已更改的项目。但这意味着您需要处理所有更新的可能性(新项目,已删除项目,更新项目)。所以这比天真的循环要复杂一点。现在,如果你的收藏品一直是全新的,而你只查询一次,那么你在这里几乎没有收获。

    由您决定根据问题的参数进行权衡。