고유해야하는 배열에서 요소를 추가 및 제거해야한다고 가정합니다.PHP 배열 키를 사용하여 데이터 저장
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
이 요소의 큰 거래를 경우 PHP는 add()
또는 remove()
가 호출 될 때마다 반복해야합니다. 대신에 나는이 작업을 수행 할 수 있습니다
Class A {
protected $elements = [];
function add($element) {
$this->elements[$element] = true;
}
function remove($element) {
unset($this->elements[$element]);
}
}
어떤 해야에 관계없이 요소의 수와 동일한 속도로 수행 할 수 있지만 이것에 대해 완전히 잘못 될 수 있으며, 그이 질문의 포인트입니다.
나는 코드에서이 모든 작업을 수행했지만 아무런 도움이되지 않지만 쓸모없는 정보 (이 예의 일부는 true
부울)를 저장하고있다. 이것은 어떤 종류의 결함으로 나타나며,이 방법이 내가 생각하기에 완전하게 방탄하지 않다는 것을 알려줍니다.
왜 두 번째 솔루션이 더 많은 메모리를 차지합니까? 열쇠를 해싱했기 때문입니까? –
예, PHP 배열을 해시 테이블로 사용하면 더 많은 메모리를 사용합니다. –
순차 배열도 해시 테이블이므로 왜 이러한 배열은 연관 배열보다 적은 공간을 차지합니까? –