我有一个包含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);
}
原因是我有一个由两个条件的逻辑组合而成的项目列表,其中相同的值将具有与另一个不同的状态。
我希望以某种方式能够从列表中获取差异,然后删除与状态匹配的重复项。
答案 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();
<强>调试:强>