使用其坐标获取三角形的共享边

时间:2019-05-19 20:52:27

标签: c#

我有问题。我需要使用它们的坐标来获取三角形的共享边数。所有三角形均存储在如下所示的列表中:

Setup

现在我正在使用IEnumerable List来比较K组合的所有内容,但是人们对我说,使用2个foreach循环可能会更容易。我知道它们的意思,但是如何检查双方是否相同?

我也不希望有双打或倒双打!
有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

定义数组中的点而不是x0,y0 ...,并且使用linq而不是循环,用很短的代码就可以很容易地计数它。

using System;
using System.Collections.Generic;
using System.Linq;

internal class Polygon
{
    public IReadOnlyList<(int x, int y)> EndPoints { get; }

    public Polygon(params (int, int)[] endPoints) => EndPoints = endPoints;
}

internal static class Program
{
    private static void Main()
    {
        var data = new[]
        {
            new Polygon((0,1),(2,3),(4,5)),
            new Polygon((0,1),(2,3),(6,7)),
            new Polygon((0,1),(4,5),(6,7)),
        };

        var shareds = data
            .SelectMany(a => data.Where(b => b != a), (a, b) => (a, b))
            .Count(c => c.a.EndPoints.Count(p1 => c.b.EndPoints.Any(p2 => p1 == p2)) >= 2)
            / 2;

        Console.WriteLine(shareds);  //3
    }
}