私は正しい方向へのポインターを見つけることができないようです、私は私が研究すべき用語が何であるかさえわかりませんが、数え切れないほどのグーグルが私を輪になって回しているようです、それでうまくいけばスタックの知性の集合的なハイブオーバーフローが役立ちます。
問題はこれです。複合論理ツリーとしか呼べないデータをフィルタリングする方法が必要です。現在、システムは単純なANDフィルタリングシステムを実装しています。たとえば、人のデータセットがあるとします。(Sex = Female)AND(Age> 23)AND(Age <30)AND(Status = Single)のすべての人を表示するように一連のフィルターを追加します。非常に簡単で、各アイテムを繰り返し処理し、すべての条件が真である場合にのみ有効なアイテムコレクションに追加します。
私が直面している問題は、関連する複雑なクエリを作成できるユーザーをどのように処理するかということです。私は、各ノードがその子を真または偽に評価する式を表すツリーのようなものを考えています。単純な例は次のようになります-((Sex == Male AND Age == 25)OR(Sex == Female AND Status == Single))AND IQ>120にフィルターします。申し訳ありませんが、でより良い例を考えることはできません。瞬間。しかし、このタイプの式ツリーをどのように表現し、これらのフィルターに対してコレクション内のアイテムを評価するのでしょうか。役立つ参考資料は何ですか?地獄、ポジティブな方向につながるかもしれないいくつかの気の利いたグーグル検索は何ですか?!
助けてくれる人に感謝します。
これは、人々のデータセットを使用したツリー形式の複合クエリの例です。
- クエリ-性別が男性で目が緑色、性別が女性、目が青色、またはステータスが単一のすべての人を表示します。パレン形式(性別==男性&&目==緑)|| (性別==女性&&(目==青||ステータス==シングル))
だから木の形でimThinking
o-Root Node
- And - Sex = Male
- And - Eyes = Blue
- Or - Sex = Female
- And Eyes = Blue
- Or Status = Single
解決策は、次のようなデータ構造で各ノードを表すことだと思います
Node
{
OpType - AND or OR
ExpressionField - The field to evaluate
ExpressionOp - =, !=, >, >=, <, <=
ExpressionValue - the value to compare the field's value against
Function Evaluate() - returns a bool
}
したがって、特定のノードについて、ANDノードの場合は子を評価し、式がtrueになり、すべてのAND子がtrueと評価されるか、OR子がtrueと評価されて再帰する場合は、trueを返します。
私が投げることができるすべての概念的な条件を満たすようですが、それ以来、私はそれを実装します。この問題を他の人にとってよりよく説明するのに役立つように、実際のコードとその動作および写真を後で投稿します。