C# 在C中创建对类型(值、值)的列表#

C# 在C中创建对类型(值、值)的列表#,c#,arrays,loops,C#,Arrays,Loops,我想创建一些int值的一对列表,如 (3,4)、(5,4)、(5,1)…(n,n) 然后将每个目标与单个目标匹配,如 (1,1) 我需要将列表的每个值与目标(1,1)进行比较,以便它打印到距离(1,1)最近的点 预期结果。 (3,4) 最近的是什么 最近的意思是,假设我们有数字4,5,6,7,8,我想找到最接近12的数字,所以答案是8,因为需要4才能达到12,但4+n从另一个移动到12,所以以同样的方式不同于单个值,我有一对值(n,n)。。。。并与(n,n)进行比较 我尝试使用2D阵列的内容 p

我想创建一些int值的一对列表,如

(3,4)、(5,4)、(5,1)…(n,n)

然后将每个目标与单个目标匹配,如

(1,1)

我需要将列表的每个值与目标(1,1)进行比较,以便它打印到距离(1,1)最近的点

预期结果。

(3,4)

最近的是什么

最近的意思是,假设我们有数字4,5,6,7,8,我想找到最接近12的数字,所以答案是8,因为需要4才能达到12,但4+n从另一个移动到12,所以以同样的方式不同于单个值,我有一对值(n,n)。。。。并与(n,n)进行比较

我尝试使用2D阵列的内容

positions = new int[3][,] 
{
new int[,] { {3,4} },
new int[,]{ {5,4}},
 new int[,] { {5,1} }

};
这给了我

3,4

5,4

5,1

现在,我需要将每个值与(1,1)进行比较,但我不知道有什么合适的数据结构可以方便地存储列表,并将每个值与(1,1)进行比较

请帮助

C#7有元组,我想你正在寻找它

例如,元组列表:

var位置=新列表
{
(3,4),
(5,4),
(5,1)
};
您可以找到“最近的”,例如:

(int x, int y) value = (1, 1);
var closest = positions.OrderBy(p => (p.x - value.x) + (p.y - value.y)).First(); // finds (5,1)

我假设这些点是平面上的点,我们可以用它们来计算两点之间的距离

有了这个假设,我将创建一个新类来保存x/y位置数据和一个运行
毕达哥拉斯定理的
DistanceBetween
方法

static void Main(string[] args)
{
    List<Point> points = new List<Point>
    {
        new Point(3, 4),
        new Point(5, 4),
        new Point(5, 1)
    };

    Point closestPoint = points.OrderBy(point => point.DistanceFromPoint(new Point(1, 1))).FirstOrDefault();

    Console.WriteLine($"The closest point to 1,1 is {closestPoint.PosX},{closestPoint.PosY}");
    Console.ReadLine();
}

private class Point
{
    public Point(int posX, int posY)
    {
        PosX = posX;
        PosY = posY;
    }

    public int PosX { get; set; }
    public int PosY { get; set; }

    public double DistanceFromPoint(Point otherPoint)
    {
        return Math.Sqrt(Math.Pow((otherPoint.PosX - PosX), 2) + Math.Pow((otherPoint.PosY - PosY), 2));
    }
}
static void Main(字符串[]args)
{
列表点=新列表
{
新观点(3,4),
新的点(5,4),
新观点(5,1)
};
Point closestPoint=points.OrderBy(Point=>Point.DistanceFromPoint(新点(1,1))).FirstOrDefault();
WriteLine($“距离1,1最近的点是{closestPoint.PosX},{closestPoint.PosY}”);
Console.ReadLine();
}
私人班点
{
公共点(int-posX,int-posY)
{
PosX=PosX;
PosY=PosY;
}
公共int PosX{get;set;}
公共int PosY{get;set;}
公共双距离起点(点其他点)
{
返回Math.Sqrt(Math.Pow((otherPoint.PosX-PosX),2)+Math.Pow((otherPoint.PosY-PosY),2));
}
}

什么是“将每个值与
(1,1)
进行比较”?
(5,1)
是否只匹配
(1,1)
?不,我必须找到1,1的最小点,所以前3,4与1,1比较,并将3,4设置为比5,4最小的点,依此类推……那么最后最接近的点将是3,4“最近”是什么意思?你们只是比较了第一个数字吗?请回顾一下问题,我已经更新了这个上下文中最近的定义,为什么最近不是(5,1)?我认为这也很好(我怀疑“own”类和元组),因为我假设它们是几何点,在方法中包含公式比在linq:)中包含公式更容易。但你的工作也很出色