复制列表中的更改

Replicating changes in a list

假设我有一个项目列表:

 - A
 - B
 - C

现在服务器从某个地方告诉我的应用程序元素 B 已被删除,但它只提供整个新列表,而不是确切的更改详细信息。 由于 WinRT ListViews 会自动添加、删除和移动其中的项目,我宁愿不刷新后备列表并调用 Reset-INotifyCollectionChanged-事件,因为这会使每个项目看起来更像动画生硬而粗糙。 相反,我想计算将本地列表转换为从服务器获取的列表所需的步骤。 (有点像 levenshtein 距离,只是不计算步数,而是计算步数本身)

e。 g.:

 1. Delete element B
 2. Add new element D to position 3

我该怎么做?

编辑:就我而言,订单 很重要

在初始列表中查找接收列表中不存在的元素:删除它们。

在接收列表中查找初始列表中不存在的元素:添加它们。

编辑:查看 this codeproject resource,显示差异算法。

根据@MihaiCaracostea 建议的页面标题,我能够找到适用于任何 IList<T> 的工作差异算法。它甚至在您枚举更改时使用 yield 来懒惰地计算差异。

文章可以找到here, the actual source code (if you don't want to read how it's done) is here

不过请注意,该算法的运行时间为 O(n²)。这方面肯定还有改进的余地。