首页 / C# / 如何在C#中合并和更新列表的节点
如何在C#中合并和更新列表的节点
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何在C#中合并和更新列表的节点,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2500字,纯文字阅读大概需要4分钟。
内容图文
![如何在C#中合并和更新列表的节点](/upload/InfoBanner/zyjiaocheng/663/b2267d1f073a47358e0181aaab708f05.jpg)
我知道关于SO的这个主题有很多通用问题.即使我尝试了一堆,但都没有成功.
这是我合并的小代码
var existingFileDetails = XmlParser<NcSyncManifestXml>.Deserialize(RemoteManifestFile).Files;
var newList = existingFileDetails
.Union(updatedFileDetails)
.OrderByDescending(c => c.LastModifiedDate)
.ToList();
我有两个列表,即List< FileDetails>.
FileDetails是一个具有名称,Md5Hash,LastModified三类的类.这里有两个清单,
List<FileDetails> UpdatedList = having 4-5 items of modified files,
and another
List<FileDetails> ExistingList = having 100 files
情境
UpdatedList中的文件可能存在于ExistingList中.如果确实存在,它们就会有不同
1. MD5Hash and
2. LastModifiedDate
要求[已更新]
假设:
ExistingList = {[{{FileName = xyx.txt,MD5 = 1,LastModified = 12/12/2013}],[{FileName = abc.txt,MD5 = 11,LastModified = 12/13/2013}],[{FileName = def.txt,MD5 = 111,LastModified = 12/14/2013}],
[{FileName = detf.txt,MD5 = 1111,LastModified = 12/14/2013}]}
现在,我收到一个新的更新文件列表,其中abc.txt和def.txt进行了更改,并添加了一个新文件Run.txt
UpdatedList = {[{{FileName = abc.txt,MD5 = 1fsd431,LastModified = 12/16/2013}]],[{FileName = def.txt,MD5 = asdasd34243,LastModified = 12/16/2013}]},[{ FileName = Run.txt,MD5 = sdf45sdf4545asdasd34243,LastModified = 12/16/2013}]}
所以合并后我的新结果列表将是
NewList = {[{{FileName = xyx.txt,MD5 = 1,LastModified = 12/12/2013}]],[{FileName = abc.txt,MD5 = 1fsd431,LastModified = 12/16/2013}],//已更新abc和def [{FileName = def.txt,MD5 = asdasd34243,LastModified = 12/16/2013}],//它们在UpdatedList中具有不同的md5和日期
[{FileName = detf.txt,MD5 = 1111,LastModified = 12/14/2013}]}}}},[{FileName = Run.txt,MD5 = sdf45sdf4545asdasd34243,LastModified = 12/16/2013}]}}}}} //添加了新文件
问题
上面的代码合并数据,但不更新数据.需要你们弄清楚.
解决方法:
您可以使用采用IEqualityComparer的Union linq运算符的重载,以便它可以看到两个对象何时(在这种情况下,实际上是相同).由于我们总是在这里喜欢更新的文件详细信息,因此我们可以将其放置在运算符的左侧,以确保它们比现有文件详细信息更受青睐.
var newList = updatedFileDetails
.Union(existingFileDetails, new FileParametersComparer())
.OrderByDescending(a => a.LastModifiedDate)
.ToList();
文件参数比较器看起来像这样-在这里我使用Name属性来检查它是否指向同一文件,尽管您可以做任何需要的事情.
public class FileParametersComparer : IEqualityComparer<FileDetails>
{
public bool Equals(FileDetails x, FileDetails y)
{
return x.Name.Equals(y.Name, StringComparison.OrdinalIgnoreCase);
}
public int GetHashCode(FileDetails obj)
{
return obj.Name.GetHashCode();
}
}
小提琴:https://dotnetfiddle.net/AtJQvy
内容总结
以上是互联网集市为您收集整理的如何在C#中合并和更新列表的节点全部内容,希望文章能够帮你解决如何在C#中合并和更新列表的节点所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。