如何检测两个列表的顺序是不是更改,如果更改则在c#中显示新添加或删除的成员
Posted
技术标签:
【中文标题】如何检测两个列表的顺序是不是更改,如果更改则在c#中显示新添加或删除的成员【英文标题】:how to detect if the order of two lists changed and if changed then show newly added or deleted members in c#如何检测两个列表的顺序是否更改,如果更改则在c#中显示新添加或删除的成员 【发布时间】:2022-01-09 00:26:48 【问题描述】:我想比较两个具有 Id、Number、Name 属性的列表,所以我想比较两个列表 例如 如果 NewList 有
Id Name Number
1 Test 1
2 Test2 2
Oldlist 有
Id NewList Number
1 Test 1
所以当我们比较两个列表时,我应该显示在 NewList Test2 中添加的文本 或者如果我从新列表中删除,那么应该在换行符上显示元素被删除的文本
这是我尝试过的代码
StringBuilder oldPref = new StringBuilder();
StringBuilder newPref = new StringBuilder();
newList = GetPref(NewInfo).OrderBy(p => p.Number).Where(x => x.Number> 0).ToList();
OldList = GetPref(OldInfo).OrderBy(p => p.Number).Where(x => x.Number> 0).ToList();
foreach (var item in OldList)
oldPref .Append(item.Name + Environment.NewLine);
foreach (var item in newList)
newPref .Append(item.Name + Environment.NewLine);
if (!String.Equals(oldPref , newPref ))
note.Append("Order Changed " + Environment.NewLine);
note.Append("From " + Environment.NewLine);
note.Append(oldPref);
note.Append("To " + Environment.NewLine);
note.Append(newPref);
任何人都可以帮助我如何正确地做这件事提前谢谢
【问题讨论】:
Id 是标识两个列表中每个元素的唯一键吗? 没有硬编码值的列表,所以就像旧列表一样,我从 db 获取该记录的列表并从 ui 获取新列表,然后对两个列表进行序列化,因此如果两个列表可能具有相同的值旧列表和新列表具有相同编号的元素,如果我从 ui 更改,它必须不同,所以我想显示添加了新元素,或者如果我删除了 ui,则删除了一个元素 【参考方案1】:最简单的方法是遍历两个列表,一次一个,看看另一个列表是否包含正在迭代的列表的每个元素:
List<MyClass> oldList = ...;
List<MyClass> newList = ...;
foreach(MyClass item in oldList)
if(newList.Contains(item) == false)
(insert logic for when item has been removed from oldList)
foreach(MyClass item in newList)
if(oldList.Contains(item) == false)
(insert logic for when item has been added to oldList)
【讨论】:
以上是关于如何检测两个列表的顺序是不是更改,如果更改则在c#中显示新添加或删除的成员的主要内容,如果未能解决你的问题,请参考以下文章