列出元组属性的不同

时间:2017-10-08 13:22:57

标签: c# list tuples distinct

我有一个看起来像这样的元组列表:

List<Tuple<double, double, double, string, string, string>> myList;

double值表示X-Y-Z cooridinate值,字符串是附加到这些坐标的某些属性。

现在我想使用myList.lis.Distinct().ToList()方法过滤掉任何重复项。毕竟,1个坐标可以是一条线的起点,而另一个是另一条线的终点,但是当它们连接时,我在列表中得到两点XYZ点,但是有其他字符串属性。 但我只想在元组的3个双精度值上使用Distinct并忽略字符串。

到目前为止,我还没有想出怎么做。这有可能,怎么样?

3 个答案:

答案 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