我似乎找不到一个指向正确的方向,我甚至不确定什么条款,我应该研究,但无数个小时的搜索似乎是抽丝我在圈子,所以希望的集体配置单元的情报的堆溢出,可以帮助。

问题是这样的,我需要方式过滤数据在什么,我只能呼叫一个合逻辑的树。目前的系统实现一个简单的和过滤系统。例如,可以说,我们有一个数据集的人。你加上一堆这种过滤器,显示所有的人在哪里(性=的女性)和(年龄>23)和(年龄 < 30)和(Status=单个)。足够容易,迭代过各个项目,增加有效项目的收集只有当每一个条件是真实的。

这问题我遇到的是我怎么处理用户能够建立复杂的查询所涉及的,或者是?我在想的东西就像一棵树,其中每个节点代表和表达评估其儿童真正的或虚假的。一个简单的例子就是过滤下((性==的男性和年龄==25)或(性==性和女性状况==单))和智商超过120.对不起我不能想到一个更好的例子。但你会如何去表示这种类型的表达树,并评估该项目在收集对这些过滤器。什么是一些参考文献,将帮助吗?妈的,一些是什么该死的谷歌搜索可能导致进入一个积极的方向?!

谢谢你,这对任何人都可以提供任何帮助。

这里是一个例子的一个合查询在树形式使用数据集的人

  • 查询显示了我所有的人,其中性别是男性和眼睛都是绿色或性别为女性,眼睛是蓝色的,或者地位,是单一的。在括号形式(性==男&眼睛==Green)||(性==女&&(眼睛==蓝||Status==单))

所以在树形式im思考

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
}

因此,对于给定的一个节点,评价欢欣,如果你是一个和节点,然后返回真的,如果你表达结果在真正的和所有你和儿童的评估,真正的或任意的或儿童的计算结果为真正的和recurse。

似乎满足每一个概念性条件,我可以扔掉它,但我们将由于我曾经执行。我会发布的真实代码最后,当它的工作和图片,以帮助描述这个问题更好地为其他人。

有帮助吗?

解决方案

你分析的表达((性==的男性和年龄==25)或(性==性和女性状况==单))和智商超过120看起来很奇怪。我要分析它为:

* And
    * Or
        * And
            * ==
                * Sex
                * Male
            * ==
                * Eyes
                * Blue
        * And
            * ==
                * Sex
                * Female
            * ==
                * Status
                * Single
    * >
        * IQ
        * 120

树类型是:

Node
{
    bool evaluate ()
}

AndNode : Node
{
    Node left
    Node right

    bool evaluate ()
    {
        return left.evaluate () && right.evaluate ()
    }
}

// OrNode is similar

EqualsNode : Node
{
    Field field
    Value value

    bool evaluate ()
    {
        return field.value () == value
    }
}

// Likewise for <, >, etc

其他提示

这些类型的查询是经常呈现为 ORed列 ANDed条款。那是一个表格格式在你读横跨多个条件 ANDed一起,然后读取下来 OR 它们。这导致一些重复的条件,但是方便用户的读、写和理解。你的样本 ((Sex == Male AND Age == 25) OR (Sex == Female AND Status == Single)) AND IQ > 120 看起来像

Sex == Male   & Age == 25        & IQ > 120 
Sex == Female & Status == Single & IQ > 120 

你可能想要谷歌的术语如'上游的微积分"和"连接正常的形式'。

我必须说,这就是为什么数据库引擎。你可以做一切你需要与设的逻辑,你甚至可能达成的结果你所寻找的,但论文的标准问题解决数据库和SQL。你也可以看看皇宫为一个在码解决方案。

听起来你需要创建一个用户界面,使建立一个简单的分析树。当按下去然后你可以走树,并创建一个皇宫的表达树,用户接口的结构。执行皇宫查询和后处理结果作必要的。因此,我建议您读了皇宫表达的树木。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top