我有一个看起来像这样的元组列表:
List<Tuple<double, double, double, string, string, string>> myList;
double值表示X-Y-Z cooridinate值,字符串是附加到这些坐标的某些属性。
现在我想使用myList.lis.Distinct().ToList()
方法过滤掉任何重复项。毕竟,1个坐标可以是一条线的起点,而另一个是另一条线的终点,但是当它们连接时,我在列表中得到两点XYZ点,但是有其他字符串属性。
但我只想在元组的3个双精度值上使用Distinct并忽略字符串。
到目前为止,我还没有想出怎么做。这有可能,怎么样?
答案 0 :(得分:2)
创建新类并覆盖Equals
方法以仅使用坐标:
class Point
{
public double X { get; set; }
public double Y { get; set; }
public double Z { get; set; }
public string Property1 { get; set; }
public override bool Equals(object obj)
{
return Equals(obj as Point);
}
protected bool Equals(Point other)
{
return X.Equals(other.X) && Y.Equals(other.Y) && Z.Equals(other.Z);
}
public override int GetHashCode()
{
unchecked
{
var hashCode = X.GetHashCode();
hashCode = (hashCode * 397) ^ Y.GetHashCode();
hashCode = (hashCode * 397) ^ Z.GetHashCode();
return hashCode;
}
}
}
答案 1 :(得分:1)
您可以在DistinctBy库中使用MoreLINQ方法。
points.DistinctBy(c => new {c.Item1, c.Item2, c.Item3}).ToList();
答案 2 :(得分:1)
你可以像这样使用GroupBy
linq方法:
var result = myList.GroupBy(x => new {x.Item1, x.Item2, x.Item3})
.Select(x => x.First())
.ToList();
演示是here