当前位置: 首页 > 编程语言 > C#

比较两个列表并找出这两个列表之间差异的最有效模式-算法是什么?Share

时间:2023-04-10 14:33:16 C#

比较两个列表并找出这两个列表之间差异的最有效模式/算法是什么?我们有两个列表,比方说学生和他们的分数。我想比较这两个列表并找到新列表和旧列表之间的增量,然后找到将任何更改插入或更新到新列表中的侵入性最小的方法。解决这个问题的最佳算法是什么?希望专注于对新列表和性能进行最小的更改。示例代码:ListexistingList=newList();列表newList=newList();publicTopLists(){InitTwoLists();}privatevoidInitTwoLists(){existingList.Add(newListItem{Name="Shane",Score=100});existingList.Add(newListItem{Name="Mark",Score=95});existingList.Add(newListItem{Name="Shane",Score=94});existingList.Add(newListItem{Name="Steve",Score=90});existingList.Add(newListItem{Name="Brian",Score=85});existingList.Add(newListItem{Name="Craig",Score=85});existingList.Add(newListItem{Name="John",Score=82});existingList.Add(newListItem{Name="Steve",Score=81});existingList.Add(newListItem{Name="Philip",Score=79});existingList.Add(newListItem{Name="Peter",Score=70});newList.Add(newListItem{Name="Shane",Score=100});newList.Add(newListItem{Name="Steve",Score=96});//这是变化newList.Add(newListItem{Name="Mark",Score=95});新的List.Add(newListItem{Name="Shane",Score=94});newList.Add(newListItem{Name="Brian",Score=85});newList.Add(newListItem{Name="Craig",Score=85});newList.Add(newListItem{Name="John",Score=82});newList.Add(newListItem{Name="Steve",Score=81});newList.Add(newListItem{Name="Philip",Score=79});newList.Add(newListItem{Name="Peter",Score=70});}}publicvoidCompareLists(){//我如何找到增量并使用旧列表的任何更改更新新列表?}}publicclassListItem{publicstringName{get;放;}publicintScore{得到;放;}}**编辑:期望的输出***期望的输出实际上是用增量改变newList例如,在这种情况下:newList.Add(newListItem{Name="Shane",Score=100});newList.Add(newListItem{Name="Steve",Score=96});//这是变化newList.Add(newListItem{Name="Mark",Score=95});newList.Add(newListItem{Name="Shane",Score=94});newList.Add(newListItem{Name="Brian",Score=85});newList.Add(newListItem{Name="Craig",Score=85});newList.Add(newListItem{Name="John",Score=82});newList.Add(newListItem{Name="Steve",Score=81});newList.Add(newListItem{Name="Roger",Score=80});//Roger是一个新条目newList.Add(newListItem{Name="Phillip",Score=79});//Philip下移了一个//Peter以70分离开了这个列表,因为我只想要前10名。所以更改将是:更新记录2为“Steve”更改分数,插入新记录“Roger”在位置9从前10名中删除“Peter”的记录。你能使用Linq吗:Listlist1=GetYourList1();列表list2=GetYourList2();vardiff=list1.Except(list2);您的具体示例:vardiff=newList.Except(existingList);不确定它是否最有效但它很简洁:)如果您正在寻找一种通用的、与语言无关的解决方案,那么您正在寻找某种用于有序列表的数据同步。基本算法是:i1=0i2=0while(i1list2[i2]){//list2[i2]isnotinlist1i2++}else{//itemisinbothlistsi1++i2++}}if(i1ifyour列表中没有两次相同的名字应该可以解决问题。在您的示例中,您有2x史蒂夫,但您需要一种方法来区分它们。publicstaticListCompareLists(ListexistingList,ListnewList){ListmergedList=newList();mergedList.AddRange(newList);mergedList.AddRange(existingList.Except(newList,newListItemComparer()));返回mergedList.OrderByDescending(x=>x.Score).Take(10).ToList();}publicclassListItemComparer:IEqualityComparer{publicboolEquals(ListItemx,ListItemy){returnx.Name==y.Name;}publicintGetHashCode(ListItemobj){returnobj.Name.GetHashCode();可以这样称呼:以上是C#学习教程:Whatisthemostefficientpattern/algorithmtocomparetwolistsandfindthedifferencebetweenthesetwolists?如果分享的内容对你有用,需要了解更多C#学习教程,希望大家多多关注---newList=CompareLists(existingList,newList);本文收集自网络,不代表立场。如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: