C#删除范围内的重复次数并标记它们

时间:2015-09-08 18:29:27

标签: c# linq duplicates

所以我遇到了C#中列表的一个小问题

我有一个列表,它有一些非常相似的日期。现在我需要做的是删除重复,但如果重复是在另一个时间的一分钟内,那么不完全相同。 除此之外,如果有特定时间的副本,对象应该在最终列表中有一个标记。

现在我可以看到如何通过大量的for循环来完成这项工作,但我希望LINQ能够很好地实现这一点。到目前为止,我的尝试并没有很顺利。

作为示例,列出以下日期:

21/12/12 12:13:00

21/12/12 12:13:20

13/12/12 10:13:00

21/10/15 07:13:00

应该变成DateDuplicate对象列表:

{date = 21/12/12 12:13:00,isDuplcicate = true}

{date = 13/12/12 10:13:00,isDuplcicate = false}

{date = 21/10/15 07:13:00,isDuplcicate = false}

public class DateDuplicate{
    public DateTime date;
    public bool isDuplicate = false;
}

List<DateDuplicate> RemoveAndMark(List<DateTime> dates){
///something nice here hopefully
}

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

试试这个

 List<DateDuplicate> RemoveAndMark(List<DateTime> dates)
    {
        var dateValues =  dates.GroupBy(y => new { AddHours = y.Date.Date.AddHours(y.Hour), y.Minute}).Select(x =>

         new DateDuplicate {isDuplicate = x.Count() > 1, date = x.Key.AddHours.AddMinutes(x.Key.Minute)}

     );
        return dateValues;
    }