我经常遇到一个场景,其中有两个对象集合(数组或IteratorAggregate类),并且需要区分这两个列表。PHP中对象的差异集合
通过DIFF,我的意思是:
- 检测重复的对象(逻辑,用于检测重复将发生变化的情况下逐案)
- 添加新对象
- 删除不在其他对象列表
本质上,我正在寻找类似array_diff
的东西,与对象一起工作。到目前为止,我一直在为每种类型的集合反复编写相同的逻辑。显然,由于重复对象的条件会因案例而异,因此没有一个单独的解决方案。但是,人们发现一种普通的模式或抽象是处理这种问题的一种优雅方式吗?
如果你需要抽象的合作如果每个对象都是一个类的实例,那么你可以实现一个类特定的equals(obj)方法,它将抽象它的一半,然后剩下的就是迭代,看看什么没有改变,插入了什么,什么是已被删除。 – nathan 2010-07-07 20:10:06
@纳森的建议很好。然而,为了提高效率,你应该在'equals'函数中执行一致的'hashCode'函数,该函数为对象提供一个哈希码(一致意味着两个相等的对象应该具有相同的哈希码)。从Java的HashSet中获取灵感(您可能希望查看HashMap的源代码,因为这是Java中的哈希集合,即removeAll和add操作)。 – Artefacto 2010-07-07 21:02:18