1

PHPの批判のほとんどはせいぜい衒学的だと思いますが、明確なデータ構造が並んでいないことは、私の日常業務の実際的な制限になりつつあります。array()コンストラクターは、すべてを実行すると主張するデータ構造を作成しますが、実際には、効率的に使用するために必要な関連情報が不足しています。具体的には、それが実際にどのようなデータ構造であるかはわかりません。リストですか?どんなリスト?ポインタの配列?Bツリー?ハッシュマップ?

ルックアップはどのように実行されますか?同じデータ構造には数値ルックアップと「連想」ルックアップがあるため、たとえばC配列で実行できるように、オフセットに基づいてルックアップを実行することはできないと思います。

少量のデータの場合、私は当然、そのようなパフォーマンスの最適化についてはあまり気にしません。しかし、私が取り組んでいるソフトウェアは、適度に大きなデータ構造が物事を少し遅くするシナリオで使用され始めています。

さらに、言及された各データ構造を明示的に作成することは可能ですか?どのように?

4

2 に答える 2

2

PHPでは、配列は内部的に二重リンクリストとして表されます。他のデータ構造を作成できるSPLクラスがいくつかあります。

PHPの魔法の一部は、異なるデータ構造を選択する必要がないことですが、ご覧のとおり、パフォーマンスの制限もあります。

于 2013-02-08T00:55:51.110 に答える
1

配列を主にハッシュテーブルの実装と見なすのが最善だと思います。ソースを少し使っているかのように、Zend HTはDLLとしてトラバースできるのに対し、比較したい操作のほとんどはDLLとしてトラバースできることに気付くでしょう。 (追加、ランダムアクセス)は典型的なHTの実装です。

純粋に数値キーを扱っている場合、それは本質的にハッシュ関数を含まないC配列へのパススルーであり、この場合、キーごとに正確に1つのHTバケットが存在します。もちろん、配列を動的に拡張する機能は、定期的なメモリの再割り当てによって促進されるため、そこでペナルティが発生します(C++で大きなstd:: vectorを事前に割り当てなかった場合と同様)。

HTH。

于 2013-02-08T02:07:35.557 に答える