可能是一个非常愚蠢的问题,我不确定它是属于这里还是属于数学。
我的问题:
我有几个X类型的元素,它们有一个布尔属性Y。
要计算Y为真的元素百分比,我计算Y为真的所有X,并将其除以元素数。
但我不想一直迭代所有元素以更新该百分比值。
我的想法是:
如果我有3个元素的33%,并且我添加第四个,其中Y为真:
(0.33 * 3 + 1) / 4 = 0.4975
显然因为0.33而无效。
有没有办法在没有迭代的情况下获得准确的解决方案或保存Y为真的项目数量?
答案 0 :(得分:2)
保留元素总数和“真实”元素总数。全局变量,对象成员变量等等。我假设在程序启动的某个时候,你有零元素。每次添加,删除元素或其布尔属性发生更改时,都会根据需要递增或递减这些计数。你永远不必迭代列表(除了可能用于测试),但代价是列表的每个更改都必须包括摆弄这些变量。
答案 1 :(得分:2)
你的想法不起作用,因为0.33不等于1/3。这是近似值。如果您采用确切的值,您会得到正确的答案:
(1/3 * 3 + 1) / 4 = (1 + 1) / 4 = 1/2
我的问题是,如果你可以存储33%的值而不进行迭代,为什么不只是存储1和3的值并计算它们?也就是说,只需保持真值和对象数的总计。当你得到新的时候增加。按需计算。没有必要每次都进行迭代。