所有
我有一个问题需要解决,我不知道如何有效地完成它。假设我有一组具有多个属性的对象,并且每个属性可以采用多个值。
例如,在伪代码中,对象可能如下所示:
Object.Color
Object.Size
Object.Sides
Object.Dimensions
我希望能够获得集合中与一组颜色,一组尺寸,一组边和一组尺寸匹配的所有对象。
现在,我的代码基本上是ColorSet中的Object.Color和SizeSet中的Object.Size以及DimensionsSet中的Object.Dimensions,然后我标记要处理的对象(通过使用字典)。
有更有效的方法吗?我可以创建一个有助于我有效解决这个问题的数据结构或算法吗?
干杯!
答案 0 :(得分:2)
如果您只想做一个这样的查询,那么您无法做到这一点。相反,我假设你想做多个这样的查询。
创建从属性到具有这些属性的对象集的字典映射。例如,对于颜色,您可能具有从Red
到{obj1, obj2, obj3}
和Blue
到{obj4, obj5}
的映射。为每个属性(颜色,大小,边,尺寸)执行此操作。
然后,您将对整个集合表达您的查询。 ColorSet中的Object.Color成为ColorSet中颜色的相应集合的并集。要求颜色和尺寸成为具有这些颜色和尺寸的物体组的交叉点。
这可能更有效,因为您只需要检查可能具有所有属性的对象,例如,如果您对Blue
对象感兴趣,则可以立即排除{{1}中的所有对象}集。