なぜ、FlexのArrayCollectionの者は、メモリ参照の方法を見て含まれていますか?
-
23-08-2019 - |
質問
.contains()
にArrayCollection
を使用する場合は、、それは常にメモリ参照を見ていきます。 .equals()
方法や.toString()
方法で、オーバーライド何を見て表示されません。代わりに、私はArrayCollection
をループするたびに必要と私は私が探しているものを見つけるまで、個々の項目をチェックします。
誰でも知っていますか?なぜcontains()
方法に彼らが望む方法を使用する人々からの方法を提供していない?
解決 3
まあ、それはそうです。これは、オブジェクトの一意のID(UID)を見つけるしようとします。 UIDが存在しない場合、それはUIDUtil.asを使用するために作成されます。
あなたは、あなたのオブジェクトがIUIDインターフェイスを実装したオブジェクトのための独自のUIDを提供することによって、この全体のデフォルトのUIDのものを回避することができます。 ArrayCollectionのは、あなたがそれを提供UIDを見ていきます。
他のヒント
は、あなただけのArrayCollectionを拡張し、含まれています()メソッドをオーバーライドすることができませんでしたか?また、あなたのプロジェクトでは、「MX /コレクション」のパッケージにはArrayCollectionのソースを貼り付け、ソースを変更することができます。この「モンキー・パッチ技術は、」プロジェクト全体を通して動作をオーバーライドします。しかし、私はそのようにArrayCollectionの変更について非常に慎重に次のようになります。それは、FlexのAPI内の場所ですべてを使用していますので、あなたは、フレームワーク内の他のコンポーネントを壊し始めましょう良いチャンスがあります。
ザ・正しい参照、(私もプリミティブのためにと考えている)によって()メソッドの検索が含まれているので、あなたがたArrayCollection内の文字列またはint型を見つけようとしている場合、あなたはいくつかのことで、検索を自分で行う必要があるでしょうループや検索のバリエーション。私は、たとえば、存在しない理由は、私たちのいずれかがあなたに言うことができるけれども、REFまたはvalで検索するかどうかを示すそのメソッドのオプションパラメータを考えていません。彼らが言うように、それは、行きます。
しかし、私は間違いなく、フレームワークのコードを猿パッチングあなたを警告したい - それはちょうどトラブルを求めています。 :)
私はシンプルをお勧めします:
in_array($haystack, $arrayCollection->toArray());