7

想象一下,我有一个项目列表:

- 一个
 -乙
 - C

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

例如:

1.删​​除元素B
 2.将新元素D添加到位置3

我该怎么做?

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

4

2 回答 2

3

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

这篇文章可以在这里找到,实际的源代码(如果你不想阅读它是如何完成的)在这里

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

于 2015-09-10T17:51:45.187 回答
2

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

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

编辑:看看这个 codeproject 资源,显示一个 diff 算法。

于 2015-09-09T21:38:52.990 回答