c# - 复制列表中的更改

标签 c# list diff array-difference inotifycollectionchanged

假设我有一个项目列表:

 - 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/

相关文章:

python - list.reverse() 不工作

python - 如何在这个 pandas 数据框中分组、排序和计算差异?

git - Git粒度—解决一行中的差异

git - 我在哪里可以找到实现的耐心差异?

python - 为什么 pytest 中的列表与控制台的输出不同?

python - 更改范围之外的列表

c# - PCL 文件中的自定义异常

c# - 关于图例标签

c# - 使用 .NET 中的 Interlocked 类实现按位运算

c# - 来自 Java 的 C# 中的 Blowfish