需要评估布尔逻辑树的指导

2023-12-22

我似乎找不到正确方向的指针,我什至不确定我应该研究的术语是什么,但无数小时的谷歌搜索似乎让我在转圈,所以希望 Stack 的集体智慧蜂巢溢出可以提供帮助。

问题是这样的,我需要一种方法来过滤数据,我只能称之为复合逻辑树。目前该系统实现了一个简单的 AND 过滤系统。例如,假设我们有一个人员数据集。您添加了一堆过滤器,以便向所有人显示 (性别 = 女性) AND (年龄 > 23) AND (年龄

我遇到的问题是如何处理用户能够构建涉及 and 和 or 的复杂查询?我正在考虑类似树的东西,其中每个节点代表和表达式评估其子节点的真或假。一个简单的例子是 - 过滤到 ((Sex == Male AND Age == 25) OR (Sex == Female AND St​​atus == Single)) AND IQ > 120。抱歉,我想不出更好的例子此时此刻。但是,您将如何表示这种类型的表达式树,并根据这些过滤器评估集合中的项目。有哪些参考资料可以提供帮助?天哪,谷歌搜索有哪些可能会带来积极方向的搜索?!

感谢任何可以提供帮助的人。

这是使用人员数据集以树形式进行复合查询的示例

  • 查询 - 向我显示性别为男性、眼睛为绿色或性别为女性、眼睛为蓝色或状态为单身的所有人。 以Paren形式(性别==男性&&眼睛==绿色)|| (性别 == 女性 &&(眼睛 == 蓝色 || 状态 == 单身))

所以我以树的形式思考

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。

似乎满足了我可以提出的每一个概念条件,但一旦我实现了它,我们就会满足。我稍后会在其工作时发布真实的代码和图片,以帮助其他人更好地描述这个问题。


您对表达式 ((Sex == Male AND Age == 25) OR (Sex == Female AND St​​atus == Single)) AND IQ > 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

需要评估布尔逻辑树的指导 的相关文章

  • 调试从 .NET Framework 升级到 .NET 6 后突然出现的命令行参数

    我将一个项目从 NET Framework 4 7 2 升级到 NET 6 当我在 Visual Studio 调试器中运行该程序时 出现意外参数 称为foo 被传递给Program Main 哪里foo来自 项目属性 Debug页面不显示
  • 如果单元格以文本字符串开头...公式

    我有一个公式 用于检查单元格是否以文本 A 开头返回 拾取 B 代表收集 和 C 代表预付 但它似乎不能正常工作 A 和 C 均返回预付费 LOOKUP LEFT A1 A B C Pick Up Collect Prepaid 我不知道l
  • 为什么使用SignTool进行代码签名时需要指定时间戳服务器?

    时间戳是可选参数 所以有人可以解释带时间戳的exe文件和不带时间戳的exe文件之间的区别吗 如果我跳过此选项会发生什么 如果您跳过时间戳选项 那么当您的证书过期时 exe 将不再具有有效的证书 如果您使用时间戳服务器 那么 exe 将始终具
  • Python tkinter:在组合框中使用“文本变量”似乎没用

    使用textvariable在 tkinter 中创建组合框时的属性似乎完全没用 有人可以解释一下目的是什么吗 我查看了 Tcl 文档 它说textvariable用于设置默认值 但看起来在 tkinter 中您只需使用 set方法来做到这
  • Pepper Robot:如何将 Python 地标检测移植到 Choregraphe?

    我正在尝试编写一个小程序 让 Pepper 通过 Choregraphe 检查房间内的地标 用于地标检测的常规 Python 代码工作得很好 但我无法将其移植到 Choregraphe http doc aldebaran com 2 5
  • ASP.NET 入口点?

    刚刚创建了一个空白的 ASP NET Web 应用程序 切入点在哪里 我看到 Default aspx 似乎是调用的默认模板 我猜 Site Master 充当布局文件 Global asax 似乎提供了一些用于事件处理的方法存根 然后是
  • 在IOS5中实现SIP功能

    我想构建一个 iPhone 应用程序 它可以选择通过 SIP VoIP 拨打电话 但目前我不知道如何开始 有谁有关于这个主题的一些信息 或者可能有一个我可以用来实现 SIP 功能的演示项目 提前致谢 你前面还有一条漫长而有趣的路 您需要选择
  • Angular2 http.post 被执行两次

    我遇到一个奇怪的问题 Angular2 的 RC1 Http 服务执行 http post 调用两次 我已经调试了我的应用程序 并且我知道这不是点击事件问题 导致核心服务调用的所有调用 public create json Object p
  • RIMM 流文件格式中各个帧的格式是什么

    我正在尝试从黑莓设备捕获一些视频帧并将其作为图像进行操作 特别是进行条形码解码 我找到了一些示例代码和规范文档 其中演示了如何使用 J2ME MMAPI 类将视频从设备的摄像头流式传输到文件和输出流 流媒体文件采用 RIM 专有的 RIMM
  • angular-cli:Karma-Webpack 因“没有此类文件或目录”而失败

    我从Tour of Heroes使用标准 Angular systemjs 现在我正在使用angular client它在开发 生产模式下运行顺利 但我无法测试任何东西ng test 以下内容会被吐出 不仅适用于test ts但也为了pol
  • 如何使用字符串的值将字符串转换为 wstring?

    我是 C 新手 我有这个问题 我有一个名为 DATA DIR 的字符串 需要将其格式化为 wstring string str DATA DIR std wstring temp L s str Visual Studio 告诉我没有与参数
  • 如何通过 jQuery onblur 提交表单

    所以我尝试通过 jQuery onblur 提交表单 即一旦焦点离开密码字段 表单就会通过 jQuery 提交 有类似的问题 但这不是我要找的 我尝试使用 document getElementById 但它不起作用 任何帮助表示赞赏 提前
  • 散列 hash_hmac 时,Convert.ToChar(0) 散列结果与 PHP 中的 chr(0) 不同的字符串

    我在 PHP 中有一个字符串 它被转换为字节数组并进行哈希处理 转换为字节数组的字符串如下所示 G 字符 0 便便 我需要 C 中的等效字节数组 这样我才能得到相同的哈希值 编辑 这是完整的问题 生成的哈希值不同 PHP api secre
  • 尝试访问从资产复制到数据\数据\的数据库中的DatabaseHelper时出现空指针异常

    我有一个数据库助手类 代码如下 这个助手的类任务是将数据库从应用程序附带的资产文件夹复制到我的应用程序的 data data 中 以便我可以使用它 一旦我将数据库放入 data data 我能够 我想添加它并执行 CRUD 操作 并且该数据
  • 如何在 Jetpack Compose 中提供相对大小

    我有一个框布局 我想相对于父框的大小来布局子视图 这可以在 SwiftUI 中使用 Geometry Reader 来实现 如何在 Jetpack Compose 中实现类似的功能 您可以使用BoxWithConstraints代替Box
  • 如何将 Ant 路径转换为文件集?

    我正在编写一个 Ant 脚本来将项目打包到 WAR 文件中 该软件由多个项目组成 它们有自己的源目录 库等 WAR 任务有一个嵌套元素lib我目前正在研究这个问题 我目前有所需库的参考作为Path 包含几个FileSets 我在类路径引用中
  • KeyboardAvoidingView“行为”中的高度与位置与填充

    KeyboardAvoidingView 中有一个 行为 属性 例如 import KeyboardAvoidingView from react native
  • Spring JMS开始根据请求监听jms队列

    Spring提供 JMSListener用于监听来自特定队列的消息的注释 还有一个替代方案实施JmsListenerConfigurer http docs spring io spring docs current spring fram
  • 关闭 IPython Notebook 中的自动保存

    我正在寻找一种方法来关闭 iPython 笔记本中的自动保存 我已经通过 Google Stack Overflow 搜索看到了有关如何打开自动保存的参考资料 但我想要相反的内容 关闭自动保存 如果这是可以永久设置的东西而不是在每个笔记本的
  • “保留供任何使用”是什么意思?

    注意 这是一个c questions tagged c问题 虽然我补充说c questions tagged c 2b 2b如果某些 C 专家可以提供 C 使用与 C 不同的措辞的基本原理或历史原因 在 C 标准库规范中 我们有这个规范文本

随机推荐