加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 删除列表中重复项的最佳性能和解决方案

发布时间:2020-12-15 23:33:20 所属栏目:百科 来源:网络整理
导读:我有一个清单: ListTest = new ListTest{new Test{Name="Test",Date="2016-06-13 18:32:01.380"},new Test{Name="Test2",Date="2016-06-13 18:32:29.117"},new Test{Name="Test3",Date="2016-06-13 18:32:40.930"},Date="2016-06-13 18:32:51.517"},new Tes
我有一个清单:

List<Test> = new List<Test>{
new Test{Name="Test",Date="2016-06-13 18:32:01.380"},new Test{Name="Test2",Date="2016-06-13 18:32:29.117"},new Test{Name="Test3",Date="2016-06-13 18:32:40.930"},Date="2016-06-13 18:32:51.517"},new Test{Name="Test",Date="2016-06-13 18:33:06.477"},.....
}

如何删除具有重复Name值的项目,在实现最佳性能的同时保留唯一具有最新Date值的项目?

解决方法

这至少是最易读的方法,并假设Date实际上是DateTime:

tests = tests.GroupBy(t => t.Name)
    .Select(g => g.OrderByDescending(t => t.Date).First())
    .ToList();

这更有效:

var latestTests = new Dictionary<string,Test>(tests.Count);
foreach (Test t in tests)
{
    Test test;
    if (latestTests.TryGetValue(t.Name,out test))
    {
        if(test.Date < t.Date)
            latestTests[t.Name] = t;
    }
    else
    {
        latestTests.Add(t.Name,t);
    }
}
tests = latestTests.Values.ToList();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读