【问题标题】:How to select duplicate value from a list in C# based on condition?如何根据条件从 C# 中的列表中选择重复值?
【发布时间】:2021-03-19 00:23:05
【问题描述】:

我有一个日期和 Fileno 作为值的列表。我需要找到重复的日期并在此基础上找到最高的 Fileno。然后将该键值对和不同的对添加到最终列表中。结果应该如下图。我可以得到重复的日期,但是如何比较重复的日期并找到最高的fileno?

Key  Date       Fileno
 1  10/8/1980   1234
 2  10/8/1980   1345
 3  8/6/1970    4567

结果

 2  10/8/1980   1345
 3  8/6/1970    4567

代码

var list = new List<valuepair>();
list.Add(new valuepair {no=key,comdate=date,filnum=fileno})
Var dup= list.GroupBy(x => comdate.Value).Where(x => comdate.Count() > 1)

【问题讨论】:

    标签: c# list dictionary duplicates keyvaluepair


    【解决方案1】:

    您快到了,除了您发布的代码不可编译 (!)。您只需要从每个组中获取具有最高“filnum”的元素:

    var list = new List<valuepair>();
    list.Add(new valuepair { no=1, comdate="10/8/1980", filnum=1234 });
    list.Add(new valuepair { no=2, comdate="10/8/1980", filnum=1345 });
    list.Add(new valuepair { no=3, comdate="8/6/1970", filnum=4567 });
    
    var listWithoutDuplicates = list.GroupBy(x => x.comdate)
        // For each group (in which items have identical dates) take only
        // the one with the highest "filnum"
        .Select(group => group.OrderBy(x => x.filnum).First())
        .ToList();
    

    【讨论】:

      【解决方案2】:

      试试这个:

      var result = data
          .GroupBy(
              i => i.Date,
              (key, group) => group.Single(x => x.Fileno == group.Max(y => y.Fileno)))
          .ToList();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-25
        • 1970-01-01
        • 2018-03-01
        • 1970-01-01
        相关资源
        最近更新 更多