我經常遇到一個場景,其中有兩個對象集合(數組或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