假设我需要添加和删除数组中必须唯一的元素。
Class A {
protected $elements = [];
function add($element) {
if (!in_array($element, $this->elements)) {
$this->elements[] = $element;
}
}
function remove($element) {
if (($key = array_search($element, $this->elements)) !== false) {
unset($this->elements[$key]);
}
}
}
这看起来很好,但是如果$elements
中包含大量元素,则每次调用add()
或remove()
时,PHP都需要进行迭代。相反,我可以这样做:
Class A {
protected $elements = [];
function add($element) {
$this->elements[$element] = true;
}
function remove($element) {
unset($this->elements[$element]);
}
}
无论元素数量多少,哪个都应该以相同的速度执行,但我可能完全错了,这就是这个问题的重点。
我在我的代码中一直都在这样做,但是我正在困扰我,我存储了一堆无用的信息(在这个例子中有些true
布尔),这些信息绝对没有用,但不能去没有他们。这看起来像某种缺陷,让我觉得这种方法并不像我想象的那样完全是防弹的。
这种在数组中存储信息的方式是否比我认为的正确的方式更好,第一个例子并没有任何缺点,除了存储不必要的信息?
答案 0 :(得分:1)
您的第二个解决方案将明显快于第一个解决方案。
缺点是它将占用更多内存,并且您只能存储整数和字符串。
如果您在相当多的元素上添加/删除了很多 - 那么请使用第二种解决方案。
如果您期待数十万甚至数百万个元素 - 那么第二个解决方案可能会出现内存不足的情况 - 所以您应该使用第一个。