2016-07-20 14 views
0

配列を一意にする必要がある配列から要素を追加および削除する必要があるとします。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ブーリアン)を保存していますが、それは絶対に目的はありませんが、それらなしでは行えません。これは何らかの欠陥のように見え、私が思うようにこの方法は完全に防弾ではないということを私にしています。

がより良くなる配列内の情報を保存するこの方法です、不要な情報を格納する以外、何私が思うには、 適切な方法、最初の例と考えられると、それに任意の欠点はありますか?

答えて

1

2番目のソリューションは、最初のソリューションよりも大幅に高速になります。

非常に多くのメモリが必要になり、そのような整数や文字列しか格納できないという欠点があります。

かなり多くの要素で追加/削除を大量に行っている場合は、2番目の解決策に進んでください。

数十万〜数百万の要素が予想される場合は、2番目の解決策がメモリ不足の例外を抱えている可能性があるため、最初のものを使用してください。

+0

なぜ2番目のソリューションがより多くのメモリを占有するのですか?鍵をハッシュしているのですか? –

+0

はい、php配列をハッシュテーブルとして使用すると、メモリが増えます –

+0

しかし、順次配列もハッシュテーブルなので、なぜそのような配列は連想配列よりもスペースが少なくなりますか? –

関連する問題