配列を一意にする必要がある配列から要素を追加および削除する必要があるとします。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
ブーリアン)を保存していますが、それは絶対に目的はありませんが、それらなしでは行えません。これは何らかの欠陥のように見え、私が思うようにこの方法は完全に防弾ではないということを私にしています。
なぜ2番目のソリューションがより多くのメモリを占有するのですか?鍵をハッシュしているのですか? –
はい、php配列をハッシュテーブルとして使用すると、メモリが増えます –
しかし、順次配列もハッシュテーブルなので、なぜそのような配列は連想配列よりもスペースが少なくなりますか? –