【发布时间】:2010-03-09 09:27:55
【问题描述】:
什么是表示位集合的好方法?
我有一组不同的开/关开关(数以千计),需要存储和检索它们的状态。天真的实现将是一个布尔数组,但我想知道是否有更好的方法(在访问速度和/或内存要求方面更好)。
我找到了这个 BitArray 实现,但它仅限于 32 位,这对于这种情况是不够的。
【问题讨论】:
标签: php arrays data-structures
什么是表示位集合的好方法?
我有一组不同的开/关开关(数以千计),需要存储和检索它们的状态。天真的实现将是一个布尔数组,但我想知道是否有更好的方法(在访问速度和/或内存要求方面更好)。
我找到了这个 BitArray 实现,但它仅限于 32 位,这对于这种情况是不够的。
【问题讨论】:
标签: php arrays data-structures
另一种选择是将它们存储在整数块中的PHP_INT_SIZE*8 中,并使用bitwise operators 设置/取消设置它们。
我无法评论此方法的速度或内存消耗,您可能需要进行一些基准测试。
【讨论】:
您可能想看看DataStructures in SPL。根据您的用例,它们可能比数组表现更好,例如当您知道集合的大小等时使用 FixedArray。对于大型数据集,这可能会有所不同。
另一个想法是将选项连接成一个由 1 和 0 组成的字符串。由于字符串可以作为数组访问,因此您可以执行 $options[31] 来检索该位置的位。那么,您所需要的只是一张地图,说明哪个位置是哪个选项。
不过,Yacoby 的解决方案在我看来是最可行的。
【讨论】:
【讨论】: