从List<>中删除重复项

时间:2015-07-30 23:05:24

标签: c#

我有一个包含1200个项目的列表,

我需要删除列表中具有特定谓词的所有重复项,我的项目具有以下状态:

“不平坦”, “不包括”, “公认”, X,Y,Z

我想删除列表中具有相同X,Y,Z且具有相同状态字符串的所有重复项

我怎样才能做到这一点?

我试着这样做:

public class MyEqualityComparer : IEqualityComparer<TcReportPoint3D>
{
    public bool Equals(TcReportPoint3D a, TcReportPoint3D b)
    {
        return a.X == b.X && a.Y == b.Y && a.Z == b.Z && a.Status != b.Status;
    } 

    public int GetHashCode(TcReportPoint3D other)
    {
        return other.X.GetHashCode() * 19 + other.Y.GetHashCode();
    }
}

然后:

  //get all distinct values with different status
    var points = reportpoints.Distinct(new MyEqualityComparer()).ToList();

    //remove distinct values from the real least, hoping to remove duplicates.
    foreach (var point in points)
    {
        if (point.Status == TePointStatus.NotCovered
            || point.Status == TePointStatus.OutOfSigma
            || point.Status == TePointStatus.NotFlat)
            reportpoints.Remove(point);
    }

原因是我有一个由两个条件的逻辑组合而成的项目列表,其中相同的值将具有与另一个不同的状态。

我希望以某种方式能够从列表中获取差异,然后删除与状态匹配的重复项。

2 个答案:

答案 0 :(得分:1)

var result = ObjectsWithDuplicates.Select(o => o.StringName).Distinct().ToList();

或者

var result = ObjectsWithDuplicates.GroupBy(o => o.StringName).Select(oo => oo.First()).ToList();

答案 1 :(得分:0)

这是一个简单的解决方案:

List<string> values = new List<string>();
            values.Add("not flat");
            values.Add("not covered");
            values.Add("accepted");
            values.Add("accepted");
            values.Add("not flat");
            values.Add("not flat");
            values.Add("not covered");
            values.Add("not flat");

 List<string> distinctValues = values.Distinct().ToList();

<强>调试:

enter image description here