繁体   English   中英

如何计算集合中某个属性值的出现?

[英]How do I count occurrences of a property value in a collection?

我将一些数据整理到自定义类对象的集合中。

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

我的收藏夹中有很多对象,但是batch只有几个可能的值(尽管未预先定义可能性的数量)。

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

最终,我想创建一个用户表单,如下所示(值是任意的,以示说明):

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

我的一个想法是做一个自定义的“批次”类,这将有属性.count.existcount和创建这些对象的集合。

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

您很好地描述了您拥有的两种可能性:

  1. 每次需要计数时循环遍历您的收藏
  2. 预计算统计信息,并在需要时访问它

这是一个经常要做的常见选择。 我认为这是性能与复杂性之间的关系。

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

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

因此,由您决定根据问题的参数在哪里进行权衡。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM