假设我有一个项目列表:
- A - B - C
现在服务器从某个地方告诉我的应用程序元素 B
已被删除,但它只提供整个新列表,而不是确切的更改细节。
由于 WinRT ListView
会自动添加、删除和移动其中的项目,我宁愿不刷新后备列表并调用 Reset-INotifyCollectionChanged
事件,因为这使每个项目看起来相当生硬和粗糙。
相反,我想计算将本地列表转换为从服务器获取的列表所需的步骤。 (有点像 levenshtein 距离,只是不计算步数,而是步数本身)
例如:
1. Delete element B 2. Add new element D to position 3
我该怎么做?
编辑:在我的案例中订购事项。
最佳答案
根据@MihaiCaracostea 建议的页面标题,我能够找到适用于任何 IList<T>
的工作差异算法。 .它甚至使用 yield
在枚举更改时懒惰地计算差异。
文章可以查here ,实际的源代码(如果您不想阅读它是如何完成的)是 here .
不过请注意,该算法的运行时间为 O(n²)。这方面当然还有改进的余地。
关于c# - 复制列表中的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32489468/