为不清楚的标题道歉。这是解释:
我有一种具有属性 a、b、c、d 的对象 Foo。假设这些属性中的每一个(字符串/布尔类型)都可以单独具有 3 个唯一值(a 具有 1、2、3;b 具有 11、12、13 等等)。
我有一组规则,我想根据这些规则匹配 Foo 对象列表。规则可以具有一个或多个具有选定值的属性。示例:规则 1:a=1 规则 2:b=12 和 a=2
我想知道获得匹配规则的最佳方法是什么(基于 C#/Haskell 的解决方案会更好,尽管只是对算法的解释也可以)。
我提到了 C#,因为如果有任何可能的方式我们可以使用 LINQ 进行此类匹配,我会很感兴趣。Haskell 被称为函数式语言的代理,因此是一种递归的、无分支的方法。
我目前正在使用字典来构建规则,然后使用反射来完成匹配。我最喜欢当前解决方案的一点是,如果我们需要添加一个新属性,那么它很容易,而且由于分支较少,代码非常容易理解。
添加示例以提高清晰度
我们有一个具有以下属性的动物对象列表
Object:Animal
Properties: Color, LivingEnvironment, Place, Mammal (all properties are of type string)
数据:
Animal1 : Red, Water, Arctic, No
Animal2 : Black, Land, Asia, No
Animal3 : Blue, Land, UK, Yes
规则
Rule1 : Color=Red And LivingEnvironment=Land
Rule2 : Color=Red And LivingEnvironment=Water
Rule3 : COlor=Blue And Place=UK And Mammal=Yes
这些规则可从用户界面配置,因此在编译时它们是未知的。用户可能会出现并将规则 3 更改为新定义
Rule3 : Color=Blue And PLace=UK
我希望这可以澄清之前引起的一些混乱。