我有问题。我需要使用它们的坐标来获取三角形的共享边数。所有三角形均存储在如下所示的列表中:
Setup
现在我正在使用IEnumerable List来比较K组合的所有内容,但是人们对我说,使用2个foreach循环可能会更容易。我知道它们的意思,但是如何检查双方是否相同?
我也不希望有双打或倒双打!
有人可以帮我吗?
答案 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
}
}